我在Perl中遇到了一個奇怪的行爲。下面的減法應產生零結果(它在Python做):科學記數法是否會影響Perl的精度?
print 7.6178E-01 - 0.76178
-1.11022302462516e-16
它爲什麼會發生,以及如何避免呢?
P.S.效果出現在「用於x86_64-linux-gnu-thread-multi的v5.10.0」(Ubuntu 9.04)和「用於darwin-2級別的v5.8.9」(Mac OS 10.6)
我在Perl中遇到了一個奇怪的行爲。下面的減法應產生零結果(它在Python做):科學記數法是否會影響Perl的精度?
print 7.6178E-01 - 0.76178
-1.11022302462516e-16
它爲什麼會發生,以及如何避免呢?
P.S.效果出現在「用於x86_64-linux-gnu-thread-multi的v5.10.0」(Ubuntu 9.04)和「用於darwin-2級別的v5.8.9」(Mac OS 10.6)
這不是科學記數法影響精度非常高,以二進制表示浮點符號的限制。請參閱perlfaq4的答案。對於任何依賴底層架構進行號碼存儲的語言來說,這都是一個問題。
如果你需要更好的數字處理,檢查出bignum編譯。
適用於我,我得到0(v5.8.8,Mac OSX)。 – 2010-01-13 12:57:25
我在這臺機器上有兩個Perls--一個5.8.8的本地版本,能夠正常工作,另一個來自內置的版本 - 展示你的問題。 – 2010-01-13 13:36:30
發生在5.10.1,MSWin32-x86-多線程(Strawberry Perl 5.10.1.0)。 – 2010-01-13 20:53:49