Springen naar inhoud

atan in Java


  • Log in om te kunnen reageren

#1

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 02 februari 2014 - 15:03

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.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 02 februari 2014 - 16:16

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);

#3

Typhoner

    Typhoner


  • >1k berichten
  • 2446 berichten
  • VIP

Geplaatst op 02 februari 2014 - 16:21

(niet 0)/0.0 geeft oneindig, terwijl 0.0/0.0 NaN geeft
This is weird as hell. I approve.

#4

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 02 februari 2014 - 22:27

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.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures