请问为什么在Matlab(R2016a)中使用double()
将单精度浮点数转换为双精度浮点数后,最后几位数字会发生变化?以下是一个例子:
format 'long'
x=3.2530601; %arbitrary single precision number
x_s=single(x);
x_d=double(x_s);
如果我查看变量的类和值,我可以看到以下内容:
x
和 x_d
是双精度浮点数,x_s
如预期一样是单精度浮点数。它们的值分别是:x=3.253060100000000
x_s=3.2530601
x_d=3.253060102462769
既然数字3.2530601
可以表示为双精度或单精度浮点数,我不明白为什么x
和x_d
不相同。它们的距离比x+eps(x)
还要远。我想也许Matlab试图通过有理分数逼近来计算双精度x_d
,但调用rat(x,16)
并不会给出与x_d
相同的结果。我一无所知。有人知道这里发生了什么吗?