3

我正在尝试使用 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但它仍然给我零,我不知道如何获得实际答案。

4

2 回答 2

3

这在 MATLAB 2014 中对我有用。

>> single(sin(10))-sin(10)

ans =

 -1.8719e-08

试试double(single(sin(10)))-sin(10)吧?但我不知道为什么你的结果不起作用。

(注意:这篇文章最初被标记MATLAB为 ,这就是为什么我说它很奇怪。)

于 2016-02-04T23:48:21.823 回答
3

在单精度和双精度之间执行计算时,返回值将具有最低精度的类。这意味着当你做

single (sin (10)) - sin (10)

你的结果将是单一的。请注意,这对于不同整数类型之间的操作是相同的;您将获得精度较低的那个。这意味着在减法发生之前,您的双精度也会被转换为单精度。

从其他答案来看,Matlab 似乎实际上使用双精度数执行计算。这很奇怪,因为 Matlab 也返回一个像 Octave 这样的单曲。它必须将单精度转换为双精度,以双精度执行计算,并将其转换为单精度。无论如何,我已经报告了一个用于 Matlab 兼容性的Octave 错误。

于 2016-02-05T02:47:55.567 回答