Gebruikersavatar
In physics I trust
Artikelen: 0
Berichten: 7.390
Lid geworden op: za 31 jan 2009, 08:09

atan in Java

Bij het programmeren in Java kwam ik het volgende probleem tegen: de functie Math.atan() gaf voor elke waarde een antwoord en nooit een fout. Na wat testen zag ik het volgende:
  • Bij 5/0 krijg ik een foutmelding: DivideByZeroException.
  • Bij 5.0/0.0 geeft hij PI/2 terug.
In de beschrijving staat dat als het argument NaN is, bij delen door 0 lijkt me, het antwoord ook NaN is en dat krijg ik nooit terug.

Toch bestaat er een veld Double.NaN.

Hoe komt dit?
"C++ : Where friends have access to your private members." Gavin Russell Baker.
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: atan in Java

Bij 5/0 krijg ik een foutmelding: DivideByZeroException.


Dit is delen met integers. Integers in Java kennen volgens mij geen NaN. De deling veroorzaakt dus een exception.

Bij 5.0/0.0 geeft hij PI/2 terug.
5.0/0.0 geeft infinity (niet NaN). Dit verklaart waarom atan PI/2 teruggeeft. Overigens neem ik aan dat je weet dat je in dit soort gevallen beter Math.atan2(y,x) kunt gebruiken.
Toch bestaat er een veld Double.NaN.

Hoe komt dit?
Een berekening kan best NaN opleveren. Probeer: Math.sqrt(-1.0);
Gebruikersavatar
Typhoner
Artikelen: 0
Berichten: 2.456
Lid geworden op: zo 20 feb 2011, 21:33

Re: atan in Java

This is weird as hell. I approve.
Gebruikersavatar
In physics I trust
Artikelen: 0
Berichten: 7.390
Lid geworden op: za 31 jan 2009, 08:09

Re: atan in Java

Bedankt allemaal.

Samenvattend, en dat bevestigt wat jullie zeggen:
The answer is that a two's-complement integer (which is what Java's int is) doesn't have any bits available to store special values like Infinity or NaN, so since the result is not representable in the desired type, an exception has to be thrown. Floating-point numbers do not have this problem (there is a bit pattern available forInfinity), and therefore no exception is needed.
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Terug naar “Informatica en programmeren”