1 van 1

atan in Java

Geplaatst: zo 02 feb 2014, 15:03
door In physics I trust
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?

Re: atan in Java

Geplaatst: zo 02 feb 2014, 16:16
door EvilBro
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);

Re: atan in Java

Geplaatst: zo 02 feb 2014, 16:21
door Typhoner

Re: atan in Java

Geplaatst: zo 02 feb 2014, 22:27
door In physics I trust
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.