我試圖使用檢查用八度的sin(x)相關聯的舍入誤差,我得到這些數字:減去單精度雙精度給我0不是我想要的
>> single(sin(10))
ans = -0.544021129608154
>> sin(10)
ans = -0.544021110889370
>> (single(sin(10))) - (sin(10))
ans = 0
這應該是: -1.8718784×10^-8
我鍵入:format long
但它仍然給我零,我不知道如何得到實際答案。
我試圖使用檢查用八度的sin(x)相關聯的舍入誤差,我得到這些數字:減去單精度雙精度給我0不是我想要的
>> single(sin(10))
ans = -0.544021129608154
>> sin(10)
ans = -0.544021110889370
>> (single(sin(10))) - (sin(10))
ans = 0
這應該是: -1.8718784×10^-8
我鍵入:format long
但它仍然給我零,我不知道如何得到實際答案。
在執行單,雙間計算,則返回值將與最低精度的類。這意味着當你做
single (sin (10)) - sin (10)
你的結果將是類單。請注意,這對於不同整數類型之間的操作是相同的;你會得到一個精度較低的。這意味着,在減法發生之前,您的雙倍也會投射到單一。
從其他答案看來,Matlab似乎實際上用雙打來執行計算。這很奇怪,因爲Matlab也會返回一個像Octave一樣的單個。它必須將單數轉換爲雙精度,執行雙精度計算,並將其轉換爲單精度。無論如何,我已經報告了一個用於Matlab兼容性的Octave bug。
你應該真的把它標記爲Octave而不是MATLAB;這似乎是一個只有八度的問題。 – beaker