乗算の場合
void func(signed int si_a, signed int si_b) {
signed int result;
if (si_a > 0) {
if (si_b > 0) {
if (si_a > (INT_MAX / si_b)) {
/* エラー処理 */
}
} else { /* si_a は正、 si_b はゼロ以下 */
if (si_b < (INT_MIN / si_a)) {
/* エラー処理 */
}
} /* si_a は正、si_b はゼロ以下 */
} else { /* si_a はゼロ以下 */
if (si_b > 0) { /* si_a is nonpositive, si_b is positive */
if (si_a < (INT_MIN / si_b)) {
/* エラー処理 */
}
} else { /* si_a と si_b はゼロ以下 */
if ( (si_a != 0) && (si_b < (INT_MAX / si_a))) {
/* エラー処理 */
}
}
}
result = si_a * si_b;
}
コメント