我絆了以下奇怪的事情,而使用MATLAB的符號工具箱錯誤在Matlab符號工具箱
/>> SYMSË
/>> Y = 11111111111111111^E
Y = 11111111111111112^e
似乎在使用大數字時存在限制。可以解決這個問題而不需要改變一個完全不同的系統,比如聖人?
我絆了以下奇怪的事情,而使用MATLAB的符號工具箱錯誤在Matlab符號工具箱
/>> SYMSË
/>> Y = 11111111111111111^E
Y = 11111111111111112^e
似乎在使用大數字時存在限制。可以解決這個問題而不需要改變一個完全不同的系統,比如聖人?
我認爲問題在於Matlab在將數字轉換爲符號表達式之前將其解析爲雙精度數字。由於雙數有52位的尾數,所以你有大約16位有效數字,但你的數字更長。
作爲替代方案,你可以嘗試直接從字符串創建數量:
y=sym('11111111111111111')^e
不幸的是,我沒有Matlab的使用權了,所以這個答案是未經測試。
這不是一個錯誤,它是一個功能。它被稱爲「四捨五入錯誤」
matlab使用雙格式來存儲正常變量,就像C編程語言中的double和許多其他語言(如C++)一樣。
實際上,「錯誤」無關的「^ X」,我們可以看到:
>> clear
>> syms y
>> format bank
>> y=11111111111111111
y =
11111111111111112.00
即使是一個簡單的分配觸發「錯誤」。
,我們可以看到雙變量實際上是如何存儲在VS的內存,採用調試模式:
正如你在截圖中看到,A和B都被存儲爲「2ea37c58cccccccc 「在記憶中,這意味着計算機無法從另一箇中辨別出來。
這就是你找到的「bug」的原因。以不同的格式
>> y=sym('11111111111111111')
y =
11111111111111111
這樣,計算機將存儲「Y」,在內存中,這將避免舍入誤差和成本:
爲了避免這種情況,你可以使用,而不是符號常量更多的記憶。
感謝迄今,它的工作原理。 –