mx 10^x を nx 2^y に変換する方法。
2.93 x 10^12 を IEEE-754 表現に変換したい。
2 つのオプション: n,y を明示的に計算します。
y = ceil(log2(m*10^x))、n = (m*10^x / 2^y)
整数のみで反復:
整数 293 を変数の仮数に書き込みます(指数のカウントを 10 に保ちます)
exp_two=0;
while (exponent>0) {
mantissa*=10; exponent--;
while ((mantissa & 1)==0) {
mantissa>>=1; exp_two++;
}
}
EDIT:IEEE-754では、0.5<n<=1.0
. それは固定されるべきです(条件が満たされるまで2で乗算/除算し、それに応じて指数yを調整しながら)
これを試すことができます:
float f = 2.93E12;
unsigned int ui = *reinterpret_cast<unsigned int *>(&f);