2019-09-01から1ヶ月間の記事一覧

普通の電卓で対数を求める

普通の電卓には対数を求める機能はないと思いますが、何とかして求めてみます。 たとえば、を求めてみます。 2×2=4、4×2=8、8×2=16……のように2nを求めていきます。すると、210=1024が10の累乗数に近いことが分かります。この関係から、であることが分かりま…

高速な完全精度 expf 関数の作り方

追記とお詫び(2023/06/25 07:45) 紹介していたコードが一文字間違っており、完全精度となっていない(どころかほとんどの入力に対して正しい値を返さない)実装になっていました。 const double t = std::fma( k, -ln2l, std::fma( k, ln2h, static_cast<double>(x</double>…

glibcのexp関数を読んでみる

最近のglibcは数学関数の高速化に取り組んでいるため確実なことは言えませんが、多くの環境ではC/C++の数学関数はこのglibcの実装を使うことになっているはずです。 glibcのexp関数の実装は、IBM Accurate Mathematical Libraryを使っているようです。 参考…

分岐予測器最新技術を読み解くメモその2

以下に紹介するのは15年前の技術なので、全然最新じゃないですね。 最近の分岐予測器でも使われる優秀な技術ということでしょう。 folded history グローバル履歴数百ビットを、高々20ビット程度に圧縮するハッシュ関数をどう作るかという問題の解決策です。…

分岐予測器最新技術を読み解くメモその1

高性能なプロセッサを作るためには、予測精度の高い分岐予測器が不可欠です。 ほとんどの分岐予測器は、主に以下の情報を使います。 * 分岐命令のあるアドレス(プログラムカウンタの値、PC) * 直近のいくつかの分岐について、分岐が成立だったか、不成立だ…