如何将float转换为double(都存储在IEEE-754表示中)而不会丢失精度?

Ric*_*ard 7 c++ floating-point double qt ieee-754

我的意思是,例如,我有以下编号用IEEE-754单精度编码:

"0100 0001 1011 1110 1100 1100 1100 1100"  (approximately 23.85 in decimal)
Run Code Online (Sandbox Code Playgroud)

上面的二进制数存储在文字字符串中.

问题是,如何将此字符串转换为IEEE-754双精度表示(有点像下面的那个,但值不一样),没有丢失精度?

"0100 0000 0011 0111 1101 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010"
Run Code Online (Sandbox Code Playgroud)

是的 相同的数字 以IEEE-754双精度编码.

我尝试使用以下算法首先将第一个字符串转换回十进制数,但它失去了精度.

num in decimal = (sign) * (1 + frac * 2^(-23)) * 2^(exp - 127)
Run Code Online (Sandbox Code Playgroud)

我在Windows平台上使用Qt C++ Framework.

编辑:我必须道歉,也许我没有明确表达的问题.我的意思是我不知道真正的值23.85,我只得到第一个字符串,我想将其转换为双精度表示而不会出现精度损失.

Ker*_* SB 4

好吧:保留符号位,重写指数(减去旧偏差,加上新偏差),并在右侧用零填充尾数......

(正如@Mark所说,你必须单独处理一些特殊情况,即当有偏指数为零或最大值时。)