C

log1pとかexpm1がなければ自分で作れば良いじゃない

マリー=アントワネット様の素晴らしいお言葉に勇気付けられながら,IA-32 + MSVC++でのlog1pの1実装. 以下の実装はIA-32 + MSVC++な環境でのみ有効なコードです. // log(1.0 + x)を計算する.特に|x| << 1.0で高精度であることが期待できる. double log1p…

exp(-∞) @リリースビルド @VC7.1

VC7.1のリリースビルドだとexp(-∞)が無効な値になるようなアセンブリ吐くじゃんか,ぶ〜ぶ〜ぶ〜. // exp(x)のリリースビルドが吐くコード // st(0) <- x fldl2e; fmulp st(1), st; fld st(0); frndint; fxch st(1); fsub st, st(1); // x = -∞だとここが(-…

C++にはlog1pありませんから

あー,しまった.ISO/IEC 14882-2003 がCの規格として指しているのは ISO/IEC 9899-1990 (C90)だからlog1pないじゃん.その上VC7.1のCRTはC99準拠じゃないからCのをC++で使うのもできにゃい…. ちょっとしょぼぼぼぼーん.

C++における浮動少数や数学関数の規格

C++における浮動少数演算や数学関数の仕様はすべてC由来で,従ってISO/IEC 14882-2003には書いてなくCの規格読めで一蹴されてしまっている.だから,例えば 「std::expに-std::numeric_limits::infinity()を食わせたら0が返ってくることは仕様として期待でき…

今日の収穫物

Lollipop ~ろりぽっぷ~ mixiタンネットランナー 2005年 08月号 苺ましまろふぃぎゃー ネコミミ茉莉ふぃぎゃー電撃大王9月号 ISO/IEC 9899-1999 というか上3つは今日買ったわけではなく,以前に買っていたのだが忙しかったので全く堪能せずにししょーのところ…