-9
?(1.0-0.9-0.1)
-0.000000000000000027755575615628914

?((double)1.0-(double)0.9-(double)0.1)
-0.000000000000000027755575615628914

?((double)1.0-(double)0.9-(double)0.1).GetType()
{Name = "Double" FullName = "System.Double"}

?((double)1.0-(double)0.9-(double)0.1).ToString()
"-2,77555756156289E-17"

2 倍の精度 (15-16)Double.ToString()より多くの文字 (32) を表示するにはどうすればよいですか?

それはMyObjectだけMyObject.ToString()表していると思います MyObject+SomeTrashFromComputer

どうして

?0.1
0.1
?0.2-0.1
0.1
?0.1-0.1
0.0

しかし

?1.0-0.9-0.1
-0.000000000000000027755575615628914

どうして

?1.0-0.1-0.9
0.0

しかし

?1.0-0.9-0.1
-0.000000000000000027755575615628914
4

3 に答える 3

3

Double.ToString()は、doubleの精度(15-16)よりも多くのchars(32)をどのように表示しますか?

32を表示しておらず、17を表示しています。先行ゼロはカウントされません。浮動小数点は、値の変化とは別に、大きさの変化を追跡できることを意味します。

MyObject.ToString()はMyObjectだけを表すと思います

確かに、浮動小数点数のメカニズムによってわずかな違いがあるかもしれませんが、実際の数は文字列によって正確に表されます。

MyObject+SomeTrashFromComputerではありません

ゴミはなく、浮動小数点の不正確さがあります。1/310進数でも存在します。正確に10進数として書き留めてください。できません。循環小数が含まれます。Doubleは基数2に格納されるため0.1、循環小数も作成されます。

また、2つの異なる表示メソッドを呼び出しているため、2つの異なる表現を取得していることに注意してください。ToStringには特定のセマンティクスがありますが、デバッグウィンドウにはおそらく異なるセマンティクスがあります。また、意味を知りたい場合は、科学的記数法を調べてくださいE

于 2012-10-19T17:23:59.297 に答える
2

このSystem.Doubleを確認してください

浮動小数点数は10進数にしか近似できないこと、および浮動小数点数の精度によって、その数値が10進数に近似する精度が決まることに注意してください。デフォルトでは、Double値には10進数の15桁の精度が含まれますが、内部では最大17桁が維持されます。浮動小数点数の精度には、いくつかの結果があります。

特定の精度で等しいように見える2つの浮動小数点数は、最下位桁が異なるため、等しく比較されない場合があります。

10進数を使用すると、浮動小数点数が10進数に正確に近似しない​​可能性があるため、浮動小数点数を使用する数学演算または比較演算では、同じ結果が得られない場合があります。

浮動小数点数が含まれている場合、値はラウンドトリップしない可能性があります。演算が元の浮動小数点数を別の形式に変換し、逆演算が変換された形式を浮動小数点数に変換し、最終的な浮動小数点数が元の浮動小数点数と等しい場合、値はラウンドトリップと呼ばれます番号。変換で1つ以上の最下位桁が失われるか変更されるため、ラウンドトリップが失敗する可能性があります。

于 2012-10-19T17:24:02.370 に答える
1

浮動小数点数の2つの側面については不明だと思います。精度範囲。_

浮動小数点表現の精度は、特定の小数をどれだけ近似できるかです。aの精度doubleは15〜16桁です。

浮動小数点表現の範囲は、数値の大小をその表現で近似できるかどうかに関係します。aの範囲doubleは+/-5.0e-324から+/-1.7e308です。

したがって、あなたの場合、計算は正確に16文字まで正確であり、その後は予想どおりではありません。

単純に見えるいくつかの数値は、標準の浮動小数点表現では表現できません。偏差がまったく必要ない場合は、のような別のデータ型を使用する必要がありますdecimal

于 2012-10-19T17:30:50.963 に答える