前回、起こるはずの桁落ちが起こらない不思議現象の原因を特定した。 ではx86では単精度浮動小数点数の精度で桁落ちを起こすことはできないのだろうか。実は案外簡単にできる。SSEを使えばいいのだ。試しに前回のソースをSSEを使うようにしてコンパイルしてみよう。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { float hoge = 1.0e-9; float piyo = 3.0; printf( "%e\n", piyo - sqrt( piyo * piyo - hoge ) ); }