3 Stimmen

Wie evaluieren ich diese Gleichung?

Ich denke, es ist ziemlich selbsterklärend aus dem Code. Offensichtlich überprüfe ich nicht immer dasselbe, es sind nur Beispielszahlen, um mein Problem zu erklären. Ich vermute, es handelt sich um Überlauf/Fehler, aber ich weiß nicht, wie ich damit umgehen soll.

double d = (1 / (684985+157781));

System.out.println(d); // gibt 0.0 zurück
System.out.println(Math.log(d)); // gibt -Infinity zurück.

8voto

smendola Punkte 2183

(1 / (684985+157781)) ist ein ganzer Ausdruck, sodass das Ergebnis 0 lautet. Das Null wird dann dem double d zugewiesen, als 0.0.

Versuchen Sie, die 1 in 1.0 zu ändern, um den Ausdruck zu einem Float zu zwingen, oder in 1.0D, um ihn zu einem double zu zwingen.

7voto

duffymo Punkte 298898

Eine weitere Person, die durch die ganzzahlige Division erledigt wurde:

double d = (1.0 / (684985.0+157781.0));

5voto

malejpavouk Punkte 4028

Nein, in Java, wenn Sie Ganzzahlen verwenden, ist das Ergebnis der Division wieder eine Ganzzahl, Sie müssen mindestens einen Operanden in double umwandeln.

double d = (1 / (double)(684985+157781));

4voto

Igor Popov Punkte 9311

Versuche double d = (1,0 / (684985 + 157781));

Beachte den Teil mit 1,0: Du möchtest die doppelte Auswertung erzwingen.

3voto

Oliver Charlesworth Punkte 259497

Der erste Ausdruck wird in Ganzzahlarithmetik berechnet. Um die erwartete Antwort zu erhalten, müssen Sie dies in Gleitkommazahlenarithmetik berechnen, wie folgt:

double d = (1.0 / (684985.0+157781.0));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X