C++相談室 part144
■ このスレッドは過去ログ倉庫に格納されています
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで ----- こんな感じかな?保証はせん
uint64_t ibm = 0x3e10624dd2f1a9fcULL
if (ibm == 0x0) { return 0.0; }
uint64_t sign = ibm >> 63;
uint64_t ibmexp = (ibm >> 56) & 0x7f;
uint64_t ibmfrac = ibm & 0x00ff'ffff'ffff'ffffULL;
if (ibmexp == 0x0) { return std::numeric_limits<double>::quiet_NaN(); } //てきとう
uint64_t ieeeexp = (ibmexp - 64) * 4 + 1023;
uint64_t ieeefrac = ibmfrac;
while(ieeefrac & 0x0100'0000'0000'0000)
{
ieeefrac <<=1;
--ieeeexp;
}
ieeefrac ^= 0x0100'0000'0000'0000;
ieeefrac >>= 1;
uint64_t ieee = (sign << 63) | (ieeeexp << 55) | ieeefrac;
return *reinterpret_cast<double*>(&ieee); というか指数部のビット長勘違いしてたわ
459は捨ててください恥ずかしい ieee形式は自前で変換せずにdoubleで計算してしまえばいいんでは? frexpとldexpでやっちゃう方が間違えにくくていいのかな エクセス64か
半導体とかで使われるGDSIIの実数がそれなんだよね。
自力で実装したわー。
4bitを16進数一桁として考えてて、指数部は16^xで表現されててケチ表現なし。 じゃあどっかにライブラリでもあるんじゃねえの
探したら出てくるパターンだろこれ ■ このスレッドは過去ログ倉庫に格納されています