名前 題名 ▼ おかぽんさん > ▼ 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 となり > 間違いなさそう。 > > なんてこったい。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link