IEEE 754倍精度のC++で16進数からfloat64への変換をしようとしています。 これは私がビットで演奏した初めてのことです。多分私のコードは十分にクリーンではありません。 なぜ私の仮名が私に奇妙な結果を与えているのか分かりませんが、私は何か間違っていると思います。16進数から浮動小数点へIEEE 754倍精度C++
long int raw = 0x40000F0000000001;
int sign = raw >> 63;
long int mantissa = (raw & 0xFFFFFFFFFFFFF);
mantissa +=1;
double exp = ((raw >> 52) & 0x7FF) - 1023;
double result = pow(-1., sign) * mantissa * pow(2.0, exp);
cout << "MANTISSA: " << mantissa << " EXP: " << exp << endl;
cout << "RESULT: " << result << endl;
、出力は次のとおりです。
MANTISSA: 16492674416642 EXP: 1
RESULT: 3.29853e+13
誰もがそれを行う方法を知っていますか?
あなたは
あなたの例のコードは '1.Fraction'を示しているので、彼は '1' を追加しています。そして、たくさんの5を抽出した後、それは '15 ... 'を使用します - それは彼が追加しようとしている先頭の1です。 –
@MartinBonnerそれでは、あなたの答えですでにカバーしているように、確かに '+ = 1'ではありません。 –