如何比较长型和双精度型
How to compare a long long with a double?
(这个有是重复的,但是我找不到重复的…)
如何在c++中正确比较long long
与double
?
将其中一个转换为另一个可能会导致精度损失和可能溢出,所以我不确定该怎么办…
诚实地说:在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
是NaN。如果fabs(d) >= 0x1.0p53
, d
表示一个整数,那么您可以将d
转换为long long
,并与long long
s进行比较。否则,您可以将ll
转换为double
,并与double
s进行比较;如果有低位丢失,则它们与比较无关。
代码(未编译和未测试):
#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
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么我的比较运算符不比较我的点长和双精度值?
- NaN 在浮点型和双精度型之间的类型转换
- 这是为浮点数/双精度函数泛型的正确方法吗?
- C++ - 泛型结构的成员在分配双精度时给出错误的值(但适用于整数)
- 将浮点型数组转换为双精度型
- 在 C++ 中获取长整型和双精度型模数的准确方法
- 初始化时无法将长整型*转换为双精度*
- Qt SQL:如何区分双精度和整型
- 双精度型静态const数组的静态const数组
- 对整型变量的双精度值-意外输出
- c++中的双精度到整型转换
- g++ abs()在短整型上似乎将其转换为双精度类型
- 两个整型到一个双精度c++
- 将整型转换为双精度
- 如何比较长型和双精度型
- 从字符串(如整型或双精度型)中提取数字
- 浮点型、双精度型和长双精度型都有最低精度保证