我正在尝试使用 Octave 检查与 sin(x) 相关的舍入误差,我得到这些数字:
>> single(sin(10))
ans = -0.544021129608154
>> sin(10)
ans = -0.544021110889370
>> (single(sin(10))) - (sin(10))
ans = 0
应该是:-1.8718784 × 10^-8
我输入:format long
但它仍然给我零,我不知道如何获得实际答案。
我正在尝试使用 Octave 检查与 sin(x) 相关的舍入误差,我得到这些数字:
>> single(sin(10))
ans = -0.544021129608154
>> sin(10)
ans = -0.544021110889370
>> (single(sin(10))) - (sin(10))
ans = 0
应该是:-1.8718784 × 10^-8
我输入:format long
但它仍然给我零,我不知道如何获得实际答案。
这在 MATLAB 2014 中对我有用。
>> single(sin(10))-sin(10)
ans =
-1.8719e-08
试试double(single(sin(10)))-sin(10)
吧?但我不知道为什么你的结果不起作用。
(注意:这篇文章最初被标记MATLAB
为 ,这就是为什么我说它很奇怪。)
在单精度和双精度之间执行计算时,返回值将具有最低精度的类。这意味着当你做
single (sin (10)) - sin (10)
你的结果将是单一的。请注意,这对于不同整数类型之间的操作是相同的;您将获得精度较低的那个。这意味着在减法发生之前,您的双精度也会被转换为单精度。
从其他答案来看,Matlab 似乎实际上使用双精度数执行计算。这很奇怪,因为 Matlab 也返回一个像 Octave 这样的单曲。它必须将单精度转换为双精度,以双精度执行计算,并将其转换为单精度。无论如何,我已经报告了一个用于 Matlab 兼容性的Octave 错误。