C++のfloatからintへの変換は未定義動作になる
C++ float-to-int conversion can be undefined behavior
C++でfloatをintに変換する際、切り詰めた値がintの範囲に収まらないと未定義動作(UB)になります。この問題は、MicrosoftのGSLライブラリのgsl::narrow関数にも存在し、ドキュメントでは例外を投げるとされていますが、実際にはUBが発生します。コンパイラやハードウェアによって結果が異なるため、バグの原因になります。正しい修正方法は、キャスト前に範囲チェックを行うことです。
「ハードウェアが行うこと」は「プログラムが行うこと」と同じではありません。