Hello,
Soweit ich das eben durch kurze Recherche festgestellt habe hast du in C oder C++ keine Möglichkeit, im Nachhinein zu testen ob ein Überlauf aufgetreten ist.
Als verantwortungsbewusster Programmierer musst du dafür sorgen, dass kein Überlauf auftritt - etwa durch das Werfen einer entsprechenden Exception, wenn der Wert für die Fakultäts-Funktion zu groß ist.
Das dafür sorgen, tue ich ja durch die Abfrage des Carry-Flags, so es denn möglich ist. Das ist zulässig und mMn auch der einzig richtige Weg.
Das habe ich befürchtet.
Auf einer Intel-Plattform iX86 wird allerdings bei einem MUL-Befehl bei Überlauf das Carry-Flag gesetzt. Wenn eine Hochsprache das nicht abfragbar machte, wäre ihr Entwickler dämlich. Da ich den Bjarne eher für pfiffig halte, wird es etwas geben. Schade nur, dass man so sehr danach suchen muss. Es sind jetzt schon ca. 12 Mannstunden draufgegangen. Dabei gibt es an diversen Stellen ebensolche Vermutungen, dass es eine Compilereinstellung sein könnte, die das CF nach der Multiplikation zugänglich macht.
Ich vermute eine Compiler-Einstellung.
Leider kenne ich die auch nicht
Dafür liefert die Bibliothek <stdexcept> dir immerhin schon mal einen "overflow_error".
Ja, soweit war ich schon.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg