09/09/01 12:29:16
>>94
実際、floatならvectorizeできるのにdoubleではできない状況だと所要時間が倍違ってくる。
最近のXeonだと画像なり周波数空間像なりがキャッシュに載るかどうかの瀬戸際だから、
floatならキャッシュに載り切る状況ならそこでも所要時間が倍以上違ってくる。
従って、floatの存在も馬鹿にしたもんじゃない。
98:デフォルトの名無しさん
09/09/01 14:26:44
入門程度のどうでもいい練習ソース書くときに、最近はdoubleで余裕って刷り込まれるからな。
99:デフォルトの名無しさん
09/09/01 15:18:03
まぁdoubleとfloatが混在するよりは良いんじゃないかねぇ
100:デフォルトの名無しさん
09/09/01 15:27:35
混在はいかんね。floatとdoubleの変換は、一回の加減乗に較べて一桁以上遅い。
で、こんなコードを書いてたり。
#if defined(USE_DOUBLE)
typedef double Float;
#elif defined(USE_FLOAT)
typedef float Float;
#else
#error USE_FLOAT or USE_DOUBLE is needed.
#endif
Float foo = Float(3.14);
101:デフォルトの名無しさん
09/09/01 16:14:03
FLT_EVAL_METHODが使えればいいんだけどねぇ
102:デフォルトの名無しさん
09/09/01 17:15:01
>>100
それだけだとdoubleな定数使ってて、後からfloatに切り替えたときに問題おきない?
103:デフォルトの名無しさん
09/09/01 17:21:27
>>102
具体的に。一応そのための関数型キャストなんだけど。
104:デフォルトの名無しさん
09/09/01 17:40:51
float f;
std::min( f, 1.0 );
このコンパイルが通らないのは正直むかつくお
105:デフォルトの名無しさん
09/09/01 17:51:28
>>103
値の丸めが起きて、それが原因の問題に
気がつき難いのじゃないかなと。
106:100=103
09/09/01 18:07:03
>>105
そもそもそれが問題になるところでは使わないから大丈夫。
>>104
std::min(f, 1.f)で何か不満でも?
107:デフォルトの名無しさん
09/09/02 01:20:44
なんで 1.0f じゃなくて 1.f とか奇怪な表記する人が多いんだろう?
108:デフォルトの名無しさん
09/09/02 02:16:10
省略できるから省略する
109:デフォルトの名無しさん
09/09/02 02:42:18
ゆとりだろ。
若しくはソースを見る人への思いやりがない人。
110:デフォルトの名無しさん
09/09/02 03:07:01
・昔のC言語だとfloatをfloatのまま演算することが無く、よほどメモリを食う場合以外
doubleの方が速かった(この頃は「floatはdoubleより遅いからメモリ節約くらいしか
役に立たない」という教育がされたので、その頃から知識を更新してないド素人か老害
は>>1のように思い続けている)
・今のC言語コンパイラでは、floatはfloatのまま演算させることが普通
・最近の環境では一般に、floatもdoubleも速度は変わらないことが多いが、SIMD命令
だと普通はfloatが速く、メモリ効率もfloatの方がいいのでfloatが速度的には有利
・精度はdoubleの方が圧倒的にマシ(というかfloatの精度はかなりひどいので要注意)
まぁ、現時点では用途で使い分けだな。それも、あくまでも現時点での話だが。
111:デフォルトの名無しさん
09/09/02 09:28:40
>>110
一つだけ補足。SIMD命令ではfloatが速いということがメリットなのではない。
SIMDなので、並列度が高くなることの方が重要。
112:デフォルトの名無しさん
09/09/02 09:38:13
それは速いに含めていいんじゃね
113:デフォルトの名無しさん
09/09/02 10:51:54
floatは精度悪すぎ
ゲームなどお遊びにしか使えね~
114:デフォルトの名無しさん
09/09/02 11:52:43
>>113
あなたの世界ではそうなんでしょうね。
115:デフォルトの名無しさん
09/09/02 11:55:43
ゲームはお遊びだが、ゲームプログラミングはお遊びには程遠いな
言葉遊びの習慣がある奴は人から信用されないぞ
116:デフォルトの名無しさん
09/09/02 13:16:05
>>115
>言葉遊びの習慣がある奴
一瞬、「そりゃお前のことじゃね?」と思ってしまった。
が、結局誰を指して言ってるんだ?
117:デフォルトの名無しさん
09/09/02 13:34:36
113のことだろ
118:デフォルトの名無しさん
09/09/02 13:57:34
113のこととしか思えないが
119:デフォルトの名無しさん
09/09/02 14:00:31
すまん、どこが「言葉遊び」なのか判らない。
120:デフォルトの名無しさん
09/09/02 15:55:34
CPUってもう64bitがデフォルトになってるから64bitでレジスタもワイヤーも組んであって
むしろ32bitをわざわざ64bitレジスタに乗っけてるような状態だから
double常用でぜんぜんいいんだけど
IPV4だのIPV5だの中途半端なものがfloatだよ
状況によってはdoubleより早いかもしらんが、doubleしかなきゃないで誰も困らないだろ
さっさと64bitに統一してしまえ
121:デフォルトの名無しさん
09/09/02 16:35:36
世の中にはatomという物もあってだな
122:デフォルトの名無しさん
09/09/02 16:56:20
>>120
>IPV5だの
そんな規格は存在しません。
>doubleしかなきゃないで誰も困らないだろ
ときどきは通信速度のことも思い出してあげてください。
123:デフォルトの名無しさん
09/09/02 18:10:57
>>120
メモリアクセス
124:デフォルトの名無しさん
09/09/02 18:15:20
>>120
SSE
125:デフォルトの名無しさん
09/09/02 18:22:02
GPUがCPUと一体化するまでこの話はお預け
126:デフォルトの名無しさん
09/09/02 18:41:29
floatをdoubleにするだけで、
性能が1/10になっちゃうなんて言われたら
そんな簡単にいらないなんて言えないよ
127:デフォルトの名無しさん
09/09/02 20:22:15
doubleしかなきゃないできっと誰も困らないが、現にdoubleより速くて精度の低い
floatがあるから使い分けなきゃ駄目なんだよ、現実は面倒だね
この程度が面倒ならプログラマなんかやってられねーけどな
128:デフォルトの名無しさん
09/09/02 21:06:32
>>1は固定小数点処理を頑張って書いてベンチもせずに使ってる奴と同じ匂いがする
129:デフォルトの名無しさん
09/09/03 01:40:58
>>120
おまえみたいな考え方の奴がいるせいで日本の経済格差が広がるんだろうな
130:デフォルトの名無しさん
09/09/29 11:34:13
最近のマシンじゃ処理時間なんて扱うメモリ量で殆ど決まるからなー。
大きなベクトルや行列演算なんかするとfloatとdoubleできっかり2倍違う。
131:デフォルトの名無しさん
09/09/30 12:15:15
>>129
経済格差が広がったのは村山政権のとき。64bit統一なんて無関係。