This is caused by the Wii VC incorrectly converting the MIPS cvt.s.d instruction to the PowerPC stfs instruction. With the latter, double to single precision floating point conversion is undefined. The Wii uses round-to-zero for this conversion, while SM64 uses round-to-nearest. 【適当な訳】 このバグは、WiiVCが内部的にMIPS(64のCPU)の命令「cvt.s.d」をPowerPC(WiiのCPU)の命令「stfs」に変換することによって発生します。stfsは倍精度から単精度
設計がおかしいのか? (スコア:1)
浮動小数点演算の規格IEEE754では複数の丸めモードが定義されているが、同じ丸めモードだったら処理結果は完全に一致するのではないのか?
それともIEEE754とは無関係に独自実装したのか?
Re: (スコア:5, 参考になる)
リンク先でたどれるGoogleドキュメントの [google.com]「Wii VC Rounding / BitFS Platform Drift」という項目によると、
Re: (スコア:0)
PowerPCのstfsを使わずに最近接丸めをソフト処理すりゃ直る程度の話かな。
Re: (スコア:0)
それよりは、計算誤差でどんどんズレるソフトの設計がマズいんじゃないかと。
Re: (スコア:0)
元ゲームプログラマですが、そのとおりですね。
元のマリオ64の作りが良くないです。
現在位置に加減算して上下動させると誤差蓄積でずれや歪みが発生するので、
本来は固定の基準点から相対的に上下動させるようにします。
Re: (スコア:0)
実機での誤差が累積して0になることを想定の上でコード書いてたら、
移植を想定しないゲームのコードとしては問題ないんじゃないかな。
Re:設計がおかしいのか? (スコア:0)
> 移植を想定しない
スーファミにもスーパーゲームボーイがあったくらいだから、移植やエミュの想定をしてないとは思えないな。
OSのバージョンが変わると動かなくなるアプリのように、不用意な作りではあるだろうよ。
メンテナ泣かせ。
Re: (スコア:0)
そのスーパーゲームボーイにもゲームボーイ実機より動作速度が2.4%速いというバグがあるとか。
スーパーゲームボーイ2で修正されたそうですが。
スーパーゲームボーイと2のゲームスピードを比較してみた。
http://nico.ms/sm13244115 [nico.ms]