Edição didática em português. O código e suas saídas preservam o original.
Exceção aritmética SIGFPE em C
Revise divisões inteiras, restos e faixas mesmo quando o nome do erro menciona ponto flutuante.

SIGFPE pode aparecer por uma operação aritmética inválida, incluindo divisão inteira por zero. O nome histórico não significa que o programa use necessariamente float ou double. O código de saída mostrado por um ambiente é uma convenção desse ambiente.
Verifique o divisor antes de usar / ou %. Confira também se a entrada foi lida corretamente: um valor não inicializado ou inesperado pode chegar ao cálculo. Em inteiros com sinal, um quociente que não cabe no tipo também é problemático.
Reduza o caso aos operandos que causam a falha e valide a faixa antes de calcular. Não confunda o comportamento da divisão inteira com as regras de ponto flutuante, que dependem do ambiente e de suas opções.
Código C
#include <stdio.h>
#include <limits.h>
int safe_divide(int a, int b, int *out_result) {
if (b == 0) {
return -1; // Error: division by zero
}
// Protect against INT_MIN / -1 signed overflow
if (a == INT_MIN && b == -1) {
return -2; // Error: signed integer overflow
}
*out_result = a / b;
return 0; // Success
}
int main(void) {
printf("=== Safe Integer Division Demo ===\n");
int test_cases[][2] = {
{100, 5},
{100, 0},
{INT_MIN, -1},
{42, 7}
};
int num_tests = sizeof(test_cases) / sizeof(test_cases[0]);
for (int i = 0; i < num_tests; i++) {
int a = test_cases[i][0];
int b = test_cases[i][1];
int result = 0;
int status = safe_divide(a, b, &result);
if (status == 0) {
printf("[OK] %d / %d = %d\n", a, b, result);
} else if (status == -1) {
printf("[GUARDED] Division by zero rejected for %d / %d\n", a, b);
} else if (status == -2) {
printf("[GUARDED] INT_MIN / -1 overflow rejected for %d / %d\n", a, b);
}
}
printf("All divisions validated safely without SIGFPE crashes.\n");
return 0;
}Abrir no compiladorSaída esperada
=== Safe Integer Division Demo === [OK] 100 / 5 = 20 [GUARDED] Division by zero rejected for 100 / 0 [GUARDED] INT_MIN / -1 overflow rejected for -2147483648 / -1 [OK] 42 / 7 = 6 All divisions validated safely without SIGFPE crashes.
Perguntas frequentes
Por que o código e a saída continuam em inglês?
Palavras-chave, identificadores e textos verificados pelos testes são preservados para não alterar o programa. As explicações e os controles estão traduzidos.