▼ Mr.XRAYさん
> なるほど,FPU の演算仕様を調べればいいということですね.
わからないアセンブラを、ステップ実行してみたところ、そうではなさそうです。
ソースがあって実行可能な環境が Delphi 5 しかない状態ですが、
Format 関数は 以下の順で呼び出しされます。
FmtStr→FormatBuf→FloatToText→FloatToDecimal→ExtToDecimal
ExtToDecimalがおそらく丸めを行っているとこなんですけど、以下は
アセンブラが読めなくて苦しいため、正しいかどうかわかりません。
丸める値が "0.005499999232" (現在やりたい処理に相当する適当な値)とすると、
まず 指定された値 0.005499999232に1E18を乗じて5.499999232E18
FRNDINT は、ここで使用されているので、先の投稿は間違い。
以降は、一文字ずつ文字列化している処理しています。
STOSWやらSTOSBで、どこにいったかわからない文字列orz
でも、以降の処理を読む限り、丸める桁の値が5であれば、一つ前の桁を1増やしてる。
銀行型のRound関数とは異なる丸め。
実際、0.065 → 0.07、0.075 → 0.08、-0.065 → -0.07、-0.075 → -0.08 となり
間違いなさそう。
なんてこったい。
|