Thu, 21 Jul 2011
intのかけ算には気をつけよう
Tweet
レアケースかもしれないし、当たり前の常識かもしれないが、ちょっとハマったので書き留めておく。
C/C++でint
を使うとたいていは32ビットになるだろう。符号ビットがあるので実質31ビットで、log102が0.3ぐらいだから、十進では31×0.3=10桁くらいが最大値である。したがって103=1000ぐらいのint
を4つかけ算するとオーバーフローしてしまう。(しかも全くエラーが出ない。)ちょっと大きめのint
をちょっとたくさんかけるときはちゃんと大きい整数型にキャストしよう。(Googleはstdint.h
で定義されているサイズが明示された整数型の使用を勧めている。)