我得到不同的結果,當試圖分裂在PHP和C#一樣的數字:浮點運算返回不同的結果在PHP和C#
PHP:
echo 1000/0.03475;
output:28776.9784173
C#:
1000/0.03475
output:28776,9784172662
爲什麼?以及如何獲得相同的結果?
我得到不同的結果,當試圖分裂在PHP和C#一樣的數字:浮點運算返回不同的結果在PHP和C#
PHP:
echo 1000/0.03475;
output:28776.9784173
C#:
1000/0.03475
output:28776,9784172662
爲什麼?以及如何獲得相同的結果?
但他們確實給出了相同的結果,只是在顯示時四捨五入到不同的小數位數。如果您要查看錶示內存中浮點數的實際位,則它們應該是相同的(給定相同的體系結構)。
因爲這就是它們如何顯示。
printf("%.10f\n", 1000/0.03475);
其他答案說的可能是你有不同的值(更準確地說,顯示不同的舍入)的原因。
然而,在PHP浮子作爲同一semantincs一個C double
(它通常具有64位)具有(另外,PHP靶向C89,而only C99 defined floating point arithmetic so that it complies with IEEE 754):
的C89標準甚至不要求IEEE格式,而對於C99,完整的IEEE 754支持(Inf,NaN,denormals)是可選的。
在C#a float
是32-bit wide並保證(主要)符合IEEE 754。最接近PHP的浮點數是C#double
。
有兩種可能性,正如其他人所說的:要麼它們是相同的浮點值,而只是打印不同,或者它們是不同的浮點值。要查看它們是否相同,則需要打印所有小數位 - 如果您的語言允許(C#和PHP不要 - 請參閱我的文章http://www.exploringbinary.com/print-precision-of-dyadic-fractions-varies-by-language/)。
它們可能是不同的浮點值,因爲並非所有的編譯器/解釋器/運行時庫都將每個十進制字符串轉換爲正確的浮點數(在我們的例子中,我特別談論了0.03475部分) 。有關更多詳細信息,請參閱我的文章http://www.exploringbinary.com/incorrectly-rounded-conversions-in-visual-c-plus-plus/。
我會說他們個人是相同的結果。 – 2010-07-13 11:12:33
不同的語言/庫使用不同的算法/代碼。所以浮點值在某種精度上有所不同,這並不奇怪。這個問題更可能是如何顯示結果。 – 2010-07-13 11:12:33
@Mitch小麥:不是標準(這裏是:IEEE標準754)的要點,所有的實現產生相同的結果? – dtb 2010-07-13 11:13:40