使用舍入到偶数将整数转换为半精度浮点格式

时间:2019-12-17 20:47:38

标签: c floating-point rounding

我已经知道如何使用截断实现对半精度浮点的转换(感谢this answer)。但是,如何使用舍入法对最接近的可表示性进行相同的转换?例如,我希望65519舍入为0x7bff(即65504),而不是无穷大。再举一个例子:在链接的解决方案中,8199将由8192表示,但8199的最接近可表示值为8200

UPD::更多示例示例:我想将32768和65519之间的整数舍入为32的整数,将16384和32768之间的整数舍入为16的整数,依此类推。在此解决方案中,8199将由8192表示,但8199的最接近可表示值为8200

1 个答案:

答案 0 :(得分:3)

您需要两件才能实现自己想要的。

1。在进行转换之前添加四舍五入

添加:

  // round the number if necessary before we do the conversion
  if (manbits > 13)
    absx += (2<<(manbits-13));

  manbits = 0;
  tmp = absx;
  while (tmp)
  {
    tmp >>= 1;
    manbits++;
  }

进行转换之前。

2。将剪贴画从无穷大更改为> 16

通过更改

  if (exp + truncated > 15)

至:

  if (exp + truncated > 16)

我更新了原始代码https://ideone.com/mWqgSP