如何转换浮动双工?

问题描述:

double可以表示float可以表示的每个值。如何转换浮动双工?

将float转换为double只需通过添加0来扩展尾数,并通过填充符号位来扩展指数部分?

我测试了一些数据在http://www.binaryconvert.com/index.html。它以这种方式工作。但是我没有找到任何关于转换的官方定义。转换是否有任何转角情况不以这种方式工作?

+7

我想你是问IEEE-754(最常见的浮点格式),而不是C语言。后者基本上与它无关。 –

这与C很少有关;其唯一保证是从float转换为double必须保留该值。

所以你真的在问(推测)IEEE-754。有些情况下,你的描述不持有至少有几个方面:

  1. 为单精度和双精度的指数有不同的偏见。所以转换不仅仅需要签名扩展。

  2. 非正规数字需要特殊处理(它们变成正常数字)。

  3. NaNs也可能需要特殊处理 - 区分信号和静音NaNs取决于尾数的值。

+0

给定一个浮点值,我们仍然可以知道它是一个非常数或正常数吗?我曾认为所有的非正常数字四舍五入到最接近的正常数字。所有正常的浮点数都必须是正常的两倍。 –

+0

你能举一个指数部分的偏见问题的例子吗? –

+0

@JoeC - 指数定义为总是正数。有可能转换的结果等同于符号扩展,但我没有完全想到它;) –