2010-05-06 15 views
6

Dies ist wahrscheinlich eine einfache, aber ist der richtige Weg, Volumen für eine Kugel in C++ zu berechnen? Mein getArea() scheint richtig zu sein, aber wenn ich getVolume() rufe, gibt es nicht die richtige Menge aus. Mit einer Kugel von radius = 1, gibt es mir die Antwort von pi, die nicht korrekt ist:Berechnung des Volumens für die Kugel in C++

double Sphere::getArea() const 
{ 
    return 4 * Shape::pi * pow(getZ(), 2); 
} 

double Sphere::getVolume() const 
{ 
    return (4/3) * Shape::pi * pow(getZ(), 3); 
} 

Antwort

22

Sie verwenden Integer-Division in (4/3). Verwenden Sie stattdessen Gleitkommadivision: (4.0/3.0).

4/3 ist 1, weil Integer-Division nur Ganzzahlen erzeugt. Sie können dies durch den Testcode bestätigen: std::cout << (4/3) << std::endl;.

+0

+1, Kraft Schwimmergesteuerter Teilung gekürzt werden wird. – Robb

+0

+1 Yup, getVolume könnte genauso gut (und kann sogar optimiert sein) 'Shape :: pi * pow (getZ(), 3)'. –

+0

@Nathan, du meinst mit dem Compiler, oder? Sonst wäre die Formel für die Berechnung der Volumina schrecklich ungenau gewesen. –

4

In (4/3) sind diese beiden Ganzzahlen, so dass Sie ganzzahlige Division erhalten. Das bedeutet, dass das Ergebnis abgeschnitten wird (1.333 ... wird zu 1). Machen Sie einen von ihnen zu einem Doppel, so wird der andere während der Division zu einem Doppel befördert, was zu einem korrekten Ergebnis führt.

Ich bevorzuge zu verwenden (4.0/3.0).

3

(4/3) eine ganze Zahl Expression und somit 1. Versuchen (4,0/3,0)