2018-10-01から1ヶ月間の記事一覧

半端なbit長の、固定幅の整数型

C99/C++11で追加された、固定幅の整数型(uint8_tやint32_tのようなものたち)は特定のビット幅で計算したいときに大変便利です。何ビットの整数が要求されているかを明示することで移植性が高まります。 また、uint16_tは必ずオーバーフローせず、結果の上…

invSqrtをニュートン・ラフソン法で求める方法の性質

先週は平方根関数をライブラリとして実装する方法をひとつ紹介しました。その方法は、デフォルトの丸めモード(最近接丸め)では正しく動作しますが、方向丸めの場合にはうまくいかないことが判明しました。 その中で、逆数平方根をニュートン・ラフソン法で…

IEEE浮動小数点数における平方根演算の精度に関する覚書

IEEE浮動小数点数における演算では、丸め誤差が不可避です。特に、複数回の演算を繰り返すと丸め誤差が積もっていき、正確な値と大きく離れた答えを得てしまうことがあります。しかし、次の演算については、(数学的に)正確な値を求めた後、一回だけの丸め…

bit列のパターンマッチング分解を行う方法

先週の話題 bit列のマッチングを行う方法 - よーる に引き続き、bit列操作の可読性を上げようという試みです。 パターンマッチを行い、特定のパターンに合致したと判明した時、残りの部分を(そのパターン特有の方法で)分解することは、特に関数型言語にお…