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

Reply via email to