現時点での結論 gcc で -O2 以上かつ -march=native (または -mfma など) のとき,積和演算を積と和の2命令にするのか fma 命令にするのかをコンパイラが判断することになるので,assert 文は(コンパイラの判断に影響を与えて浮動小数点数の演算結果を変え得るという意味で)副作用をもつ.
Quote
今井義弥
@imai_yoshiya
march=native をつけたときに assert を有効化するか無効化するか(DNDEBUG の有無)で結果が変わるのわけわかめ.コンパイラの仕様なのかバグなのか,自分のコードがバグっているのか.