色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

float型とdouble型の変数の違いを教えてほしいです
2Dゲームを作っててdoubleの変数を使ってたんですが使ってはだめだと先輩に言われたんです。
理由を聞いたら、先生が「doubleは使わないほうがいい」と言われたらしくてちゃんとした理由がわかりませんでした。
それを知って何をするということではないんですが、気になって調べても出てこなかったので質問させてください。
まだゲーム作りを始めたばっかりでぜんぜん詳しくないですが教えてくれたら助かります。

gooドクター

A 回答 (6件)

doubleとfloatでは、精度が違い、そのためメモリに占める大きさも違います。


また、一般的には、桁が多いとその分計算時間がかかります。
ですから、精度が必要ない場面では、floatを使う、というのも一つの考えかたです。

ですが、実際には「一概に言えない、処理系依存」です。

以前は全てCPUで計算していたので、精度=計算量でした。
しかし、最近では浮動小数点演算専用の回路が付いているケースが多く、計算時間は同じだったり、doubleに変換が必要でその分floatの方が遅かったり、floatでの演算はより高速にできたり、と様々です。
32bitCPUでは、32bitのfloatの方が扱いやすいでしょうが、64bitCPUでは64bitのdoubleの方が扱いやすいかもしれません。
Cのmath.hで使える標準関数はdouble型のものがほとんどです。三角関数は2Dのゲームでも使う機会が多いのではないでしょうか。sinもcosもdouble型です。内部演算は当然doubleですので、変数にfloatを使ったからと早くはならず、むしろfloat型の変数に入れるときに暗黙の型変換が発生する分遅くなる可能性もあります。

そういった背景を考え検討した結果、floatを使う方がよい、と判断したのならいいのですが、「先生に言われた」では理由になりません。
聞けるのなら、その先生に理由を聞いてください。真意がわからないうちは、鵜呑みしないことです。
    • good
    • 24
この回答へのお礼

回答ありがとうございます

お礼日時:2010/06/06 23:07

本来なら先生に理由を聞きに行くのが先でしょうが、それはさておき。



doubleよりfloatのほうがいいのは、主に「メモリをケチる場合」と「FPUがない場合の高速化」です。
前者は、floatとdoubleでは、必要なメモリ量が概ね倍ほど違うためfloatにするとそれだけでメモリが節約できます。
後者は、FPUというのは浮動小数演算器(Floating Point number processing Unit)のことで、その名が示す通り浮動小数演算のみを行うための専用ユニットです。
これがある場合にはハードウェア上で高速に浮動小数の計算処理を行ってくれるので深く考えずにdoubleを使って問題ないのですが、ない場合はFPUが行ってくれている膨大な計算量をソフト的に処理しなければならなくなり精度と演算量が比例するため「精度重視でdouble」「多少精度が落ちても速度を取ってfloat」「速度最優先・精度無視でint」の三択が発生することになります。

メモリ量やFPUの有無はプラットフォーム次第、要は「何で動くものを作るか」次第な訳ですが、ゲーム機で作ることを最終目標にしているのであれば、いずれは必要になる知識ではあるかと思います。
    • good
    • 10
この回答へのお礼

回答ありがとうございます

お礼日時:2010/06/06 23:07

No2の補足ですが、整数値の計算であっても、16,777,215(だったかな)以上の数値を扱うのならdoubleにしないとダメです。



先頭1ビットは符号用なので、値がマイナスになります。
    • good
    • 3
この回答へのお礼

回答ありがとうございます

お礼日時:2010/06/06 23:06

メモリ使用量の違いと、ゲームにDoubleほどの有効桁数は必要ないという考えではないでしょうか。

    • good
    • 1
この回答へのお礼

回答ありがとうございます

お礼日時:2010/06/06 23:06

単純に、Floatで収まるなら、メモリー等容量が半分で住むからじゃないですか?


PCのスペックによっては実行速度にも影響しますし・・・・・
昔は1バイトでも切り詰めてプログラミングしないと、動かなかったりしましたから^^;;
まぁ、最近のマシンは性能いいから、容量の問題は無いと思います。
実際に浮動小数点演算するなら、Doubleの方処理はが早いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

お礼日時:2010/06/06 23:05

2Dであるから、扱う数値が整数に限られてませんか?


「浮動小数点型の変数を使用するな。整数型で十分」の意味では?

この回答への補足

回答ありがとうございます
すいません質問がたりませんでした
doubleをfloatにしろと言われたんです

補足日時:2010/06/06 19:15
    • good
    • 0
この回答へのお礼

回答してくれてありがとうございます
質問が足りなくてすいませんでした

お礼日時:2010/06/06 23:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング