On Thursday, 15 March 2018 at 17:31:38 UTC, rumbu wrote:
On Thursday, 15 March 2018 at 17:18:08 UTC, Miguel L wrote:
On Thursday, 15 March 2018 at 16:31:56 UTC, Stefan Koch wrote:
On Thursday, 15 March 2018 at 15:28:16 UTC, Miguel L wrote:
[...]
integers don't have a sign-bit.
since they are not necessarily singed.
However if an integer is signed and using 1-complement
you can either do sign = var < 0 or
sign = (var & (1 << (sizeof(var)*8 - 1));
though I cannot tell which one is faster you have to
experiment.
Thanks. Just one more question:
Is this code correct? I don't care about +0 or -0 as the
calculations on f guarantee it cannot be 0 at all.
int a;
float f;
....
if((a<0)==signbit(f)) {....}
else {...}
If you are comparing with an integer, please avoid signbit. It
will return 1 also for -0.0, -inf and -nan.
Don't bother also with signbit for integer types. The compiler
usually outsmarts the programmer in finding the best way to
compare an integer with 0.
You can simply write:
if (a < 0 && f < 0) {...}
This will cover the [-inf..0) but not the NaN case. You can
test it in a separate branch
if (isNaN(f)) {...}
There are various in my code there are more than two variables,
and i'd like to check when their signs differ.I am trying to
avoid this, maybe there is no point in it:
if(!((a>=0 && f>=0) || (a<0 && f<0))){
//signs are different
....
}
Thanks, anyway