2012-09-03 65 views
1

我絆了以下奇怪的事情,而使用MATLAB的符號工具箱錯誤在Matlab符號工具箱

/>> SYMSË

/>> Y = 11111111111111111^E

Y = 11111111111111112^e

似乎在使用大數字時存在限制。可以解決這個問題而不需要改變一個完全不同的系統,比如聖人?

回答

2

我認爲問題在於Matlab在將數字轉換爲符號表達式之前將其解析爲雙精度數字。由於雙數有52位的尾數,所以你有大約16位有效數字,但你的數字更長。

作爲替代方案,你可以嘗試直接從字符串創建數量:

y=sym('11111111111111111')^e 

不幸的是,我沒有Matlab的使用權了,所以這個答案是未經測試。

+0

感謝迄今,它的工作原理。 –

2

這不是一個錯誤,它是一個功能。它被稱爲「四捨五入錯誤」

matlab使用雙格式來存儲正常變量,就像C編程語言中的double和許多其他語言(如C++)一樣。

實際上,「錯誤」無關的「^ X」,我們可以看到:

>> clear 
>> syms y 
>> format bank 
>> y=11111111111111111 
y = 
11111111111111112.00 

即使是一個簡單的分配觸發「錯誤」。

,我們可以看到雙變量實際上是如何存儲在VS的內存,採用調試模式:

enter image description here

正如你在截圖中看到,A和B都被存儲爲「2ea37c58cccccccc 「在記憶中,這意味着計算機無法從另一箇中辨別出來。

這就是你找到的「bug」的原因。以不同的格式

>> y=sym('11111111111111111') 
y = 
11111111111111111 

這樣,計算機將存儲「Y」,在內存中,這將避免舍入誤差和成本:

爲了避免這種情況,你可以使用,而不是符號常量更多的記憶。