2010-07-13 123 views
0

我得到不同的結果,當試圖分裂在PHP和C#一樣的數字:浮點運算返回不同的結果在PHP和C#

PHP:

echo 1000/0.03475; 
output:28776.9784173 

C#:

1000/0.03475 
output:28776,9784172662 

爲什麼?以及如何獲得相同的結果?

+4

我會說他們個人是相同的結果。 – 2010-07-13 11:12:33

+0

不同的語言/庫使用不同的算法/代碼。所以浮點值在某種精度上有所不同,這並不奇怪。這個問題更可能是如何顯示結果。 – 2010-07-13 11:12:33

+1

@Mitch小麥:不是標準(這裏是:IEEE標準754)的要點,所有的實現產生相同的結果? – dtb 2010-07-13 11:13:40

回答

4

但他們確實給出了相同的結果,只是在顯示時四捨五入到不同的小數位數。如果您要查看錶示內存中浮點數的實際位,則它們應該是相同的(給定相同的體系結構)。

0

因爲這就是它們如何顯示。

printf("%.10f\n", 1000/0.03475); 
1

其他答案說的可能是你有不同的值(更準確地說,顯示不同的舍入)的原因。

然而,在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 float32-bit wide並保證(主要)符合IEEE 754。最接近PHP的浮點數是C#double

0

有兩種可能性,正如其他人所說的:要麼它們是相同的浮點值,而只是打印不同,或者它們是不同的浮點值。要查看它們是否相同,則需要打印所有小數位 - 如果您的語言允許(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/

相關問題