如何在C ++中使用__float128来获取__int128?我在quadmath.h中找到了一些舍入函数,但是它们的结果很长或甚至更短或整数存储在__float128中。这个问题与Why do round() and ceil() not return an integer?不重复,因为我使用的是128位数字而且投射不适用于它们。
答案 0 :(得分:0)
__int128
只能表示一个整数,其范围为-2 128 (或-2 127 - 在某些系统中为1)至2 127 + 1。
__float128
可以表示一个浮点数高达2 16384 - 2 16271 ≈1.1897×10 4932 这个数字远大于__int128
。
你需要:
roundq
获取四舍五入的__float128
而不是。__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;
}