[英]Math.Log(125,5) does not return 3 in C#
為什么
var test = Math.Log(125,5);
Console.WriteLine(test % 1);
返回4.44089209850063E-16
根據參考資料, Math.Log
的重要部分是Math.Log
工作的:
return (Log(a)/Log(newBase));
其中單參數Log
計算自然對數。 這是實現不同基數的浮點對數的自然方法。 自然對數在一般情況下當然不是精確的,它們中的大多數甚至不是有理數,而double
已經不能精確處理任意有理數,更不用說無理數了。 沒有特別的理由將兩個這樣有點不精確的數字相除會導致一個精確的數字,盡管它可能發生。 在這種情況下,結果(十六進制的double
精度位)為 0x4008000000000001 而 3 將是 0x4008000000000000:它以最小的可能關閉量關閉。
對於像Log(125, 5)
這樣的精確情況Log(125, 5)
可以精確計算結果,但這不是Math.Log
試圖做的。 如果這是你想要的,你可以自己做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.