我正在尝试使用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
但它仍然给我零,我不知道如何得到实际答案。
答案 0 :(得分:3)
这适用于MATLAB 2014。
>> single(sin(10))-sin(10)
ans =
-1.8719e-08
请尝试double(single(sin(10)))-sin(10)
吗?但我不知道为什么你的结果不起作用。
(注意:这篇文章最初被标记为MATLAB
,这就是为什么我说它很奇怪。)
答案 1 :(得分:3)
在single和double之间执行计算时,返回值将具有最低精度的类。这意味着当你做
时single (sin (10)) - sin (10)
你的结果将是单一的。注意,对于不同整数类型之间的操作,这是相同的;你会得到一个精度较低的那个。这意味着在减法发生之前,你的double也会被转换成单身。
从其他答案来看,似乎Matlab实际上用双精度执行计算。这很奇怪,因为Matlab也会返回像Octave这样的单曲。它必须将单个转换为double,以double形式执行计算,并将其转换为单个。无论如何,我已经报告了Octave bug的Matlab兼容性。