アサリの砂抜きは不要?

アサリの砂抜きは常識ですが、実際は潮干狩りで取ったアサリを良く洗えば直ぐ食べれます??

SUN と PC の 計算精度比較

2006-12-24 21:47:39 | 開発
SUNのソフトをWinodwsに移植したが、最後に浮動少数点計算精度問題が残った。「SUNの処理結果と同じにする」事をWinodws移植の目標としていたが、どうしても合わないので詳細に調査したら、CPUアーキテクチャーの違いによる物だと結論づけて、一応の終了にしたが。。。

<CPUアーキテクチャー>
1.SUN Ultra-SPACE  :64bitCPU 浮動小数点計算 64bit
2. Winsows Intel(8086系):32 bit(または64bit) 浮動小数点計算 64bit 内部80bit
<調査>
 a*b/c+d 計算のアセンブラソースを調査
<SUNアセンブラ>
ldd [%fp-24], %f16  // %f16<--a
ldd [%fp-24], %f14 // %f14<--b
ldd [%fp-24], %f6 // %f6 <--c
fmuld %f16, %f14, %f4 // %f4 <-- a*b
fdivd %f4, %f6, %f0 // %f0 <-- a*b/c
ldd [%g1+%lo(.LLC1)], %f2 // %f2 <--d
faddd %f0, %f2, %f8 // %f8 <-- a*b/c+d
<WINアセンブラ>
fld QWORD PTR _a$[esp-4]
fld ST(0)
fld QWORD PTR _b$[esp-4]
fmul ST(1), ST(0)     // a*b
fld QWORD PTR _c$[esp-4]
fdiv ST(2), ST(0) // a*b/c
fxch ST(2)
fadd QWORD PTR _d$[esp-4] // a*b/c + d

==>
 SUN/WINともに素直なコードであり、「浮動小数点レジスター」に値を入れて、mul/dev/addの計算を行っているだけで、通常ならば違いはない結果になるはず。。と思えるが。。この「浮動小数点レジスター」に、そう言えば大きな違いが有ったのを思い出した。8087の時代(1983年ごろ?)から、Intelの「浮動小数点レジスター」内部は80bitであり高精度計算が出来るようになっていた。アセンブラソースを良く見ると途中の計算結果は「浮動小数点レジスター」内部に保存されており、80bitの精度を保持しているので最終結果の精度が若干高くなるのもうなずける(SUNは全て64bit浮動少数点計算になるので、Windowsとの結果が微妙に異なる)。
 この違いにより、現実的な問題は今回は発生していないが、SUNとの比較で違いがでたので、その理由探しに長い時間がかかってしました。。。人騒がせな「浮動小数点レジスター」でした


旅行グルメ

にほんブログ村 旅行ブログ 旅行グルメへ
にほんブログ村