我覺得在Matlab中出現錯誤的地方是用來顯示數字e的小數位數。 如果把Matlab_Is數字e的表示有錯誤嗎?
>> sprintf('%.30f',exp(1))
ans =
2.718281828459045500000000000000
enter code here
我認爲這是錯誤的,因爲數量和包含小數,而不是僅僅在這個例子中,16 MATLAB顯示無限多的。 有誰知道如何使用Matlab獲得更好的精度? 謝謝。
我覺得在Matlab中出現錯誤的地方是用來顯示數字e的小數位數。 如果把Matlab_Is數字e的表示有錯誤嗎?
>> sprintf('%.30f',exp(1))
ans =
2.718281828459045500000000000000
enter code here
我認爲這是錯誤的,因爲數量和包含小數,而不是僅僅在這個例子中,16 MATLAB顯示無限多的。 有誰知道如何使用Matlab獲得更好的精度? 謝謝。
不,沒有錯誤。
默認情況下,Matlab中的數字由double-precision floating point表示。這些有52位尾數,大約相當於16位有效數字。要求Matlab打印出更多的小數位不會奇蹟般地創造出更高的精度。
這是不太可能的,你會需要更多的精度比這個。
Matlab使用IEEE雙精度,所以這就像您將獲得vanilla Matlab一樣好。
http://www.mathworks.com/support/solutions/en/data/1-1AGHW/?solution=1-1AGHW建議獲取符號數學工具箱,它支持可變精度算術。或者使用另一種工具,如Maple。
關於double precision and MATLAB的一些補充信息。
在全IEEE系統,該間距是 2- 52. MATLAB調用此量EPS,這是短期的 機器最小。
EPS = 2 ^( - 52)
IEEE標準之前,不同的機器有EPS的不同 值。 eps的近似十進制值是2.2204•10-16。 eps/2或eps可以稱爲舍入級別。將單個 算術運算的結果四捨五入爲最接近的浮點數 的最大相對誤差爲eps/2。 數字之間的最大相對間距爲eps。無論哪種情況,您都可以說四捨五入的 級別大約有十六位十進制數字。
我建議你閱讀woodchips對我的回答的評論 - 儘管你在小數點後得到更多數字,但它並不是更準確。 – 2010-11-15 15:36:34