由於浮點錯誤2 ^(log(63)/ log(2))不等於63.檢查63在Matlab中不等於2 ^(log(63)/ log(2))
format long;
>> 2^(log(63)/log(2))
ans =
63.000000000000014
而可惜的是我不能根據Matlab的文件上對數使用VPA:下面的結果
與精確符號值,雙精度值固有 包含舍入誤差。 當您在雙精度 輸入上調用vpa時,vpa無法恢復丟失的精度,即使它返回的數字多於雙精度值的 。但是,vpa可以識別和恢復p/q,p/q,(p/q)1/2,2q和10q形式的表達式的精度,其中p和q是中等大小的整數。
那麼我該如何解決這個問題?我有非常大的數字,如2^200,我得到非常大的錯誤。
編輯:我不是問爲什麼發生。我在問如何使這項工作100%準確,所以這不是重複的。
迄今爲止最好的解決辦法:由@Sardar_Usama建議按預期並不總是工作
可惜的是解決方案。檢查以下的結果:
>> sym(2^(log(2251799813685247)/log(2)))
ans =
2251799813685259
在另一方面
>> 2^(log(vpa(2251799813685247))/log(vpa(2)))
ans =
2.2517998136852470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0*10^0*10^15
更接近2251799813685247 = 2^51更多。它的誤差約爲9.491 * 10^-494,這是目前爲止最好的解決方案,但仍然存在一些錯誤。
有什麼具體問題?一般來說,如何避免浮點不準確?或者,如果沒有不準確的情況下如何評估2 ^(log(k)/ log(2))? –
它有什麼問題,它不完全是63?這只是一個'2 * eps(63)'的區別。一般來說,數值計算不應該依賴確切的數值。 – horchler
@horcler當你使用大數字時,它會顯着提高。 – Kitiara