如何比较长多头?

时间:2014-06-22 02:40:44

标签: c++ double long-long

(此 是重复的,但我找不到重复...)
如何在C ++中正确比较long longdouble

向对方施放会造成精度损失和可能溢出,所以我不知道该怎么做......

1 个答案:

答案 0 :(得分:4)

老实说:在long double具有64位有效数字的平台上使用long double

如果您想要处理没有此类支持的平台:

我假设long long是64位而double是通常的IEEE 64位double

如果d >= 0x1.0p63,则long long小于d < -0x1.0p63。如果long long,则您的d != d大于false。如果d,则比较应返回fabs(d) >= 0x1.0p53,因为d是NaN。如果dlong long代表一个整数,那么您可以将long long转换为ll并与double进行比较。否则,您可以将double转换为#define COMPAR(a, b) ((a) < (b) ? -1 : (a) == (b) ? 0 : 1) int compar(long long a, double b) { if (b != b) return false; if (b >= 0x1.0p63) return -1; if (b < -0x1.0p63) return 1; if (fabs(b) >= 0x1.0p53) return COMPAR(a, (long long)b); else return COMPAR((double)a, b); } #undef COMPAR 并与{{1}}进行比较;如果丢失了任何低位,它们与比较无关。

代码(未编译和未经测试):

{{1}}