2012-11-10 22 views
1

我想創建一個具有三個值1/6,2/3和1/6的向量。很顯然,我的Matlab必須將這些有理數轉換成實數,但我預計它會最大化可用的精度。指定分數時的matlab版本

它的存儲值作爲雙打,但它存儲他們爲 -

b = 

    0.1667 0.6667 0.1667 

這是一個巨大的精度損失。對於數字的小數部分來說,雙精度不應該是52位精度,爲什麼數字會被嚴重截斷?

+0

這是什麼情景的目的是什麼?所以我可以建議可能的解決方案 – logan

+0

我正在用Runge Kutta 4求解微分方程。對於這樣的數值分析,精度的損失非常可怕。 – sonicboom

回答

7

數字只能以這種方式顯示。在內部,他們使用完全精確。您可以使用format命令更改顯示精度。例如:

format long

將其顯示爲:

0.166666666666667 0.666666666666667 0.166666666666667

所以答案是簡單的;沒有精度損失。這只是一個顯示問題。

您可以閱讀documentation瞭解可用於顯示數字的其他格式。

+0

是的,很高興知道,歡呼。 – sonicboom

0

您不能將值存儲爲1/2或1/4或1/6到Double變量中......這些存儲爲系統後面的小數;如果要存儲這些值,請嘗試將其存儲爲可以工作的字符串;

每當你想利用這些字符串,則該值轉換成數字,然後繼續數學計算....

+1

我看不到這一點。這樣,你會一遍又一遍地轉換相同的字符串,並總是得到相同的答案。這不會有任何目的。 –

+0

這個場景的目的是什麼?所以我可以建議可能的解決方案... – logan

+2

真的沒有情景。 OP對Matlab顯示數字的方式感到困惑,並認爲顯示精度代表了用於存儲數字的實際精度。 –