私はすばやいです(2.2を使用)。200.23 - 200
が0.2299999999999898
に等しいと表示されています。私はコンピュータが不合理な数を正確に表すことができないことを知っていますが、なぜ有理数も正しく表現されていないのか分かりません。これは私のプログラムで生成された出力番号に影響を与え、問題につながります。私は数を定義し、その全体と小数部分を抽出しています上記のコードでSwift 2.2で丸め誤差が表示されています(たとえば、0.23ではなく0.22999999)。
var number:Double = 200.23 //Number I'm testing
var left: Double = floor(number) // Extracting integer part
var right: Double = number-left // Extracting fraction part
:ここ
は、この動作を示すサンプル遊び場コード(私の実際のコードの一部の非常に単純なバージョン)です。小数部は0.23
である必要がありますが、それは
0.2299999999999898
と表示されています。私は
200.23
から
100.23
に元の番号を変更した場合
は同様に、その後、小数部分は0.230000000000004
どのように私はこの問題を解決することができることが示されていますか?
編集:
この問題の背景について私は尋ねられました。私は数字をたくさん使う統計アプリケーションを設計していますが、実際には小さな組み込み電卓もあります。だから私が200.23 - 0.23を計算しようとしていて、0.23以外のものを見ると、彼は驚くでしょう!
私は既に浮動小数点問題を知っています。しかし、どうすればそれを回避できますか?今日書かれたすべてのソフトウェアは、どうにかこの問題に対処することができます。 – Ahmad
「コンピュータが非合理的な数字を正確に表現できないことは知っていますが、なぜ有理数も正しく表現されていないのはわかりません」それは事実ではありません。コンピュータはすべての有理数を正確に表すことはできません。小数点表記法(人間)は、不合理な数字を正しく表記することもできません。 – Evert
整数を使用するだけです。1.23は123を意味します.836.92は、83692 – Kametrixom