こんにちは、サイボウズ・ラボの光成です。 今回は小数を整数に丸める処理に関して、x86/x64における命令がどのように変わってきたかを紹介します。 C++における小数から整数への変換ルール まずC++における浮動小数点数型(float, double)を整数型(int, int64_tなど)に丸めるルールをおさらいしましょう。 floating-integral conversionsによるとその変換では小数点部分を取り除きます。 つまり1.5, 2.3, -2.9をintにキャストするとそれぞれ1, 2, -2になります。 なお整数型に入りきらないときの挙動は未定義です。 4種類の丸め規則 x86の浮動小数点数を扱うFPUは丸め処理のモードを4種類持ちます。 これはIEEE標準754の丸めモードの規則に従ったものです。 最近接丸め(round to nearest(even) : RN)