project euler 66を解いていて力任せなコードでunsigned long型のxについてx2を計算したらオーバーフローしてしまった。
オーバーフロー検出としては以前利用したlimits.h
をインクルードして、
#include<limits.h> if (x > ULONG_MAX / x) return 1;
とするか、gccなら-ftrapv
オプションを利用する。exit codeについてはhttp://tldp.org/LDP/abs/html/exitcodes.htmlを見る。
- メモ
- 手元で実行する場合は多倍長整数ライブラリというものを利用すると良さそう
- C++ における整数型の怪と "移植性のある" オーバーフローチェッカー (第1回 : 整数型の怪と対策の不足) - Qiita