c++ - How to compare a long long with a double? -
c++ - How to compare a long long with a double? -
(this has duplicate, can't find duplicate...) how compare long long
double
in c++?
casting either other can cause loss of precision , perchance overflow, i'm not sure do...
honestly: utilize long double
on platform long double
s have 64-bit significand.
if want handle platforms without such support:
i'm going assume long long
64-bit , double
usual ieee 64-bit double
.
if d >= 0x1.0p63
, long long
less it. if d < -0x1.0p63
, long long
greater it. if d != d
, comparing should homecoming false
because d
nan. if fabs(d) >= 0x1.0p53
, d
represents integer, can convert d
long long
, comparing long long
s. otherwise, can convert ll
double
, comparing double
s; if low bits lost, irrelevant comparison.
code (uncompiled , untested):
#define compar(a, b) ((a) < (b) ? -1 : (a) == (b) ? 0 : 1) int compar(long long a, double b) { if (b != b) homecoming false; if (b >= 0x1.0p63) homecoming -1; if (b < -0x1.0p63) homecoming 1; if (fabs(b) >= 0x1.0p53) homecoming compar(a, (long long)b); else homecoming compar((double)a, b); } #undef compar
c++ double long-long
Comments
Post a Comment