__float128舍入

时间:2016-09-11 14:40:43

标签: c++ gcc rounding

如何在C ++中使用__float128来获取__int128?我在quadmath.h中找到了一些舍入函数,但是它们的结果很长或甚至更短或整数存储在__float128中。这个问题与Why do round() and ceil() not return an integer?不重复,因为我使用的是128位数字而且投射不适用于它们。

1 个答案:

答案 0 :(得分:0)

__int128只能表示一个整数,其范围为-2 128 (或-2 127 - 在某些系统中为1)至2 127 + 1。

__float128可以表示一个浮点数高达2 16384 - 2 16271 ≈1.1897×10 4932 这个数字远大于__int128

你需要:

  • 使用roundq获取四舍五入的__float128而不是。
  • 检查该值是否在[-2 128 ,2 128 ]范围内,这些数字在__int128的限制之外是1,并且两者都是可以用浮点数正确表示,因为它们是2的幂。
  • 如果它在该范围内,则转换为__int128

或者,从gcc documentation开始,您可以使用llroundq:舍入到最接近零的最接近的整数值。但在这种情况下,请引用libquadmath源代码:

  else
    {
      /* The number is too large.  It is left implementation defined
     what happens.  */
      return (long long int) x;
    }