Merge pull request #3309 from mahiuchun/const

Improve ToBinary() for double precision.
pull/3307/head^2
Kim Kulling 2020-07-04 21:22:42 +02:00 committed by GitHub
commit 95a23af16f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 3 deletions

View File

@ -208,13 +208,14 @@ BinFloat ToBinary(const ai_real &pValue) {
// floating-point numbers are of sign-magnitude format, so find out what signed number
// representation we must convert negative values to.
// See http://en.wikipedia.org/wiki/Signed_number_representations.
const BinFloat mask = BinFloat(1) << (CHAR_BIT * sizeof(BinFloat) - 1);
// Two's complement?
const bool DefaultValue = ((-42 == (~42 + 1)) && (binValue & 0x80000000));
const bool OneComplement = ((-42 == ~42) && (binValue & 0x80000000));
const bool DefaultValue = ((-42 == (~42 + 1)) && (binValue & mask));
const bool OneComplement = ((-42 == ~42) && (binValue & mask));
if (DefaultValue)
return BinFloat(BinFloat(1) << (CHAR_BIT * sizeof(BinFloat) - 1)) - binValue;
return mask - binValue;
// One's complement?
else if (OneComplement)
return BinFloat(-0) - binValue;