【ゲーム制作】丸めこめミ☆ソ☆

PCによって演算結果が違う><!
0
少佐@Neetpia -幻想戦略録- @__syousa__

[東方蟒酒宴][東方AoE][ #Boushuen ] どうみてもハッシュエラーは各PC間の計算結果の違いに起因するっぽいので、可能な限り今晩緊急修正パッチだします。申し訳ございません。

2011-08-25 12:57:03
椿 @mrv_tsubaki

@syo_sa お疲れさまです。やはりこういった場合には浮動小数点演算は使わない、というのが教訓ですかね…。

2011-08-25 13:10:55
少佐@Neetpia -幻想戦略録- @__syousa__

@mrv_tsubaki もしくは、FPSでよくある値送信or四捨五入(笑)ですかね。

2011-08-25 13:12:25
椿 @mrv_tsubaki

@syo_sa 0.49999999と0.5000000の違いで困る少佐さんの未来が見える…。

2011-08-25 13:20:52
少佐@Neetpia -幻想戦略録- @__syousa__

@mrv_tsubaki 工夫した四捨五入アルゴリズムが必要そうですね

2011-08-25 13:21:37
少佐@Neetpia -幻想戦略録- @__syousa__

複数プレイヤーから同じデータ再生したらやっぱり浮動小数点の誤差の範囲がちがっていました。

2011-08-25 13:22:34
少佐@Neetpia -幻想戦略録- @__syousa__

@heppoko 少なくとも環境によって、1.000000xと0.999999xがPC及び設定?によって発生することは確認しました。

2011-08-25 13:32:59
へっぽこ @heppoko

@syo_sa まだ書きかけのメモだけど、参考にでも http://t.co/3FZBYzp

2011-08-25 13:39:00
出水 @izmktr

わんくまのときに、浮動小数点ってPCによって同じ計算でも答え違う事ありますよね、ってな話してたら「ねーよ!」とか言われたよなー

2011-08-25 13:43:07
でぃー(Dee) @wdko

@izmktr え、PCによって結果が違うですか?同一バイナリなのに?条件一緒で?

2011-08-25 14:00:00
出水 @izmktr

@_w_dee 丸め方がチップによって違うみたいですねー

2011-08-25 14:25:43
へっぽこ @heppoko

浮動小数点数の制御ワードの設定内容は人によって微妙に違うかもね。ライブラリ関数使ってもいいし、インラインアセンブラ使ってもいいし。

2011-08-25 13:45:56
くろろ @Eagle966

@heppoko 先生C#の場合どうしたらいいですか!

2011-08-25 13:46:50
へっぽこ @heppoko

@Eagle966 同じような方法でできる、はず、たぶん、きっと

2011-08-25 13:48:46
へっぽこ @heppoko

浮動小数点数の printf の出力結果が違っても、実際には同一の値であることもあるので inline DWORD F2DW(float f) { return *((DWORD*)&f); } みたいに整数型にキャストして見てみるとよいです

2011-08-25 13:54:37
EIKI`@Yukkuma @eiki_okuma

ん?というか/fp:preciseでdoubleの丸め誤差って消えるんじゃないの 消えないの 消えるけど重くなるからfast使ったほうがいいとかなの

2011-08-25 14:09:07
へっぽこ @heppoko

@eiki_okuma 「丸め誤差が消える設定」などという魔法は存在しないのである

2011-08-25 14:11:03
EIKI`@Yukkuma @eiki_okuma

@heppoko ガーン となるとやはりへっぽこさんテクニックみたいなアレは必須ということですかね

2011-08-25 14:11:23
へっぽこ @heppoko

precise の意味が「IEEE 754 に対して厳密」であって、「計算結果が正確」の意味ではない、というのが罠すぎて面白い

2011-08-25 14:14:18
へっぽこ @heppoko

@eiki_okuma double しか使わなくても /fp:fast のほうがメリットが多いかもね

2011-08-25 14:16:44
少佐@Neetpia -幻想戦略録- @__syousa__

@eiki_okuma @heppoko 設定以外にも何かテクニック的なことしてるのでしょうか?

2011-08-25 14:18:38