N
Noob4Life
Gast
Hi,
ich hätte ne Frage bezüglich Overflows von primitiven Datentypen (byte, short,int,long,float,double).
Wenn ich z.B. in meinem Programm die Fakultät einer Zahl n (n € N) ausrechnen lassen will, reicht int grad mal für das Intervall [1,12] aus, danach wird nur noch Schrott produziert.
Die Fakultät von 12 ist 479001600, von 13 wäre sie 13*479001600=6227020800, mit int gibt Java aber 1932053504 aus.
Sieht nett aus, ist aber falsch.
Tja, und meine Frage wäre nun, wie kann ich es hinkriegen, dass Java, sobald es zu einem Overflow kommen würde, eine Fehlermeldung ausgibt bzw. die Schleife abbricht bzw. in eine Schleife mit BigInteger/BigDecimal übergeht ?
Ich kann ja schlecht bei jedem Program erst mal von Hand ausrechnen ab wann es nen Overflow gibt und dann von vornerein im Code die Beschränkung für ein Intervall [1,x) implementieren. Ob ich die Beschränkung bei der Eingabe mach oder ab einem festen x eine andere Funktion, die dann mit BigIntegern oder BigDecimal arbeitet, mache, spielt ja keine große Rolle, da ich vorher schon die Zahl x wissen muss.
Und wenn ich x schon weiss, wozu brauch ich dann das Programm noch ???:L Kann ja dann von Anfang an alles von Hand machen.:### :meld:
Bei nem Program das lediglich die Fakultät berechnet ists ja noch kein Problem den Overflow festzustellen, aber schon allein bei einem Program das mit der Fakultät eine weitere Berechnung durchführen soll könnte es schwieriger werden. Gut, da weiss man das bei 12 Schluß ist, aber bei Berechnungen mit Potenzen oder Fibonaccizahlen usw. wirds schon schwerer. Vor allem wenn das Ergebnis der Berechnung in einer Schleife wiederverwendet wird, was auch zu Overflows führt, wenn man simple Addition oder Multiplikation zweier oder mehrerer beliebiger x,y,z €N durchführt.
Die einzige Möglichkeit die mir bisher eingefallen ist, ist einfach alles von Anfang an mit BigIntegern/BigDecimal zu machen, was aber nicht Sinn der Sache sein kann, wobei der Code natürlich kürzer wäre, als 2 oder mehrere Funktionen für diverse Fälle zu schreiben.
Bin für jede Hilfe oder Denkanstoß dankbar
ich hätte ne Frage bezüglich Overflows von primitiven Datentypen (byte, short,int,long,float,double).
Wenn ich z.B. in meinem Programm die Fakultät einer Zahl n (n € N) ausrechnen lassen will, reicht int grad mal für das Intervall [1,12] aus, danach wird nur noch Schrott produziert.
Die Fakultät von 12 ist 479001600, von 13 wäre sie 13*479001600=6227020800, mit int gibt Java aber 1932053504 aus.
Sieht nett aus, ist aber falsch.
Tja, und meine Frage wäre nun, wie kann ich es hinkriegen, dass Java, sobald es zu einem Overflow kommen würde, eine Fehlermeldung ausgibt bzw. die Schleife abbricht bzw. in eine Schleife mit BigInteger/BigDecimal übergeht ?
Ich kann ja schlecht bei jedem Program erst mal von Hand ausrechnen ab wann es nen Overflow gibt und dann von vornerein im Code die Beschränkung für ein Intervall [1,x) implementieren. Ob ich die Beschränkung bei der Eingabe mach oder ab einem festen x eine andere Funktion, die dann mit BigIntegern oder BigDecimal arbeitet, mache, spielt ja keine große Rolle, da ich vorher schon die Zahl x wissen muss.
Und wenn ich x schon weiss, wozu brauch ich dann das Programm noch ???:L Kann ja dann von Anfang an alles von Hand machen.:### :meld:
Bei nem Program das lediglich die Fakultät berechnet ists ja noch kein Problem den Overflow festzustellen, aber schon allein bei einem Program das mit der Fakultät eine weitere Berechnung durchführen soll könnte es schwieriger werden. Gut, da weiss man das bei 12 Schluß ist, aber bei Berechnungen mit Potenzen oder Fibonaccizahlen usw. wirds schon schwerer. Vor allem wenn das Ergebnis der Berechnung in einer Schleife wiederverwendet wird, was auch zu Overflows führt, wenn man simple Addition oder Multiplikation zweier oder mehrerer beliebiger x,y,z €N durchführt.
Die einzige Möglichkeit die mir bisher eingefallen ist, ist einfach alles von Anfang an mit BigIntegern/BigDecimal zu machen, was aber nicht Sinn der Sache sein kann, wobei der Code natürlich kürzer wäre, als 2 oder mehrere Funktionen für diverse Fälle zu schreiben.
Bin für jede Hilfe oder Denkanstoß dankbar