Auf welchen Plattformen löst eine Ganzzahl dividiert durch Null eine Gleitkomma-Ausnahme aus?

Bei einer anderen Frage fragte sich jemand, warum sie einen "Gleitkomma-Fehler" bekamen, obwohl sie in ihrem C ++ - Programm eine Ganzzahl-Division durch Null hatten. Darum entstand eine Diskussion mit der Behauptung, dass Gleitkomma-Ausnahmen in der Tat niemals für @ ausgelöst werdeschwebe durch Null teilen, aber nur auf @ entstehganze Zah geteilt durch Null

Das klingt komisch für mich, weil ich das weiß:

MSVC-kompilierter Code unter x86 und x64 auf allen Windows-Plattformen meldet eine Ganzzahldivision durch Null als "0xc0000094: Ganzzahldivision durch Null" und eine Gleitkommadivision durch Null als 0xC000008E "Gleitkommadivision durch Null" (sofern aktiviert)

IA-32 und AMD64 ISAs spezifizieren#DE (Integer Divide Exception) als Interrupt 0. Gleitkomma-Ausnahmen lösen Interrupt 16 (x87-Gleitkomma) oder Interrupt 19 (SIMD-Gleitkomma) aus.

Andere Hardware haben ähnlich unterschiedliche Interrupts z. PPC erhöht 0x7000 bei float-div-by-zero und fängt überhaupt nicht nach int / 0 ab.

Unsere Anwendung entlarvt Gleitkomma-Ausnahmen für das Teilen durch Null mit dem_controlfp_s intrinsic (letztendlichstmxcsr op) und fängt sie dann zum Debuggen ab. Ich habe also definitiv IEEE754-Ausnahmen in der Praxis gesehen, die durch Null geteilt wurden.

So schließe ich, dass es einige Plattformen gibt, die int-Ausnahmen als Gleitkomma-Ausnahmen melden, wie zB x64 Linux (Erhöhen von SIGFPE für alle Rechenfehler unabhängig von der ALU-Pipe).

Welche anderen Betriebssysteme (oder C / C ++ - Laufzeiten, wenn Siesin das Betriebssystem) Ganzzahl dividiert durch Null als Gleitkomma-Ausnahme melden?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage