atan in Java

Moderators: jkien, Xilvo

Reageer
Gebruikersavatar
Berichten: 7.390

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.

Berichten: 7.068

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
Berichten: 2.455

Re: atan in Java

This is weird as hell. I approve.

Gebruikersavatar
Berichten: 7.390

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.

Reageer