Python 2.7.10を使用して、私は5 * math.sqrt(3)とmath.sqrt(5 ** 2 * 3)が同じフロート:Python:math.sqrt()の変わった丸め動作
import math
import decimal
print decimal.Decimal(5*math.sqrt(3))
print decimal.Decimal(math.sqrt(5**2*3))
print 5*math.sqrt(3) == math.sqrt(5**2*3)
戻り
8.660254037844385521793810767121613025665283203125
8.6602540378443872981506501673720777034759521484375
False
彼らは15日、小数点の場所に異なることを示しています。
for j in range(1,10+1):
for i in range(1,10+1):
a = i*math.sqrt(j)
b = math.sqrt(i**2*j)
if not(a == b):
print [i,j],
問題[I、J]ペアのリストが含ま:[3、興味深いことに、これは5と3に以下のコードを隣の番号を発生しません平等に障害が発生したために数字のいくつかのペアが表示さ[9,6]、[10,3]、[3,6]、[6,6]、[7,6]、[6] [3,8]、[6,8]、[9,8]、[5,10]、[7,10]、[10,10] ...なぜ丸めが解除されるのか、これらのペアのために、そして他にはありませんか?
Decimalは何を期待していますか? –
興味深い発見の間、それは[浮動小数点数学が壊れている]ためです(http://stackoverflow.com/questions/588004/is-floating-point-math-broken)。これらの値のどちらも「正しい」ものではありません。その違いは、中間丸めにある可能性があります。 – usr2564301
数学は長い10進数で正確な結果を返さないことが知られています。私は "問題のペア"のリストが正確で、文脈になる可能性が高いと疑う。 –