Does someone know why casting double()
on a single precision floating point number in Matlab (R2016a) changes the last digits? Here is an example:
format 'long'
x=3.2530601; %arbitrary single precision number
x_s=single(x);
x_d=double(x_s);
If I look at the classes and values of the variables, I can see the following:
x
and x_d
are doubles, x_s
is single as expected. The values are:
x=3.253060100000000
x_s=3.2530601
x_d=3.253060102462769
Since the number 3.2530601
can be represented as a double or single precision floating point number, I don't understant why x
and x_d
are not the same. They are further away than x+eps(x)
. I thought maybe Matlab tries to work out the double precision x_d
by rational fraction approximation, but calling rat(x,16)
does not give the same result as x_d
. I'm clueless. Does anyone know what is happening here?