掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バージョンでTrunc結果が異なる (ID:49599)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
残念ですが, 質問された方の書き込みの内容については,私の理解が及ぶ範囲ではありません. また,現象が確認可能な具体的なコードもありませんので, 以下は実数値を扱う際の一般的な内容です. コンピュータでは有限の桁数しか扱えません. 数学で言う無限小や無限大という概念はありません. 特に 0.003 等の小数点以下の値を正確に扱うことはできません. その結果,計算結果が数学的な演算と異なることになります. 以下はそのことを確認するための簡単なサンプルです (上記と意味合いが少し違いますが). procedure TForm1.Button1Click(Sender: TObject); var R1 : Single; begin R1 := 0.1; if R1 = 0.1 then begin MessageBox(Handle, '同じ値です', '結果', MB_ICONINFORMATION); end else begin MessageBox(Handle, '同じ値ではありません', '結果', MB_ICONWARNING); end; end; FPU には制御ワードというのがあります. Delphi で実数値,つまり浮動小数点の計算を行う場合, この FPU の制御ワードを変更することによって,演算の精度やエラーの制御ができます. サードパーティが提供しているライブラリには,この制御ワードを変更するものがあります. 例えば OpenGL がそうです. 現在の制御ワードの値は Get8087CW 関数で確認できます. ( SafeLoadLibrary は,FPU の制御ワードを保持するライブラリの読み込みです) [ 浮動小数点数制御ルーチン ] http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0%E5%88%B6%E5%BE%A1%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3 [ Linux で x86 アセンブラ(浮動小数点編)] https://qiita.com/MoriokaReimen/items/8d3b0dddcc2a77ecdfa5 手前味噌ですが,興味があれば以下の記事を参考にしてください. [ 890_計算誤差 ( 数値計算の誤差 ) と多倍長演算 ] http://mrxray.on.coocan.jp/Delphi/plSamples/890_CalcError.htm
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.