2017-06-25 8 views
1

Ich möchte erkennen, ob ein Doppel, wie 6.25 ist ein perfektes Quadrat oder nicht.Erkennen, ob ein Double ist ein perfektes Quadrat in Java

Um perfekte Quadrate für die Zahlen, deren Quadratwurzel eine ganze Zahl zu erkennen, ich so etwas wie

public boolean isPerfectDouble(double i) 
    { 
     if (Double.isInfinite(i)) { 
      return false; 
     } 
     double sqrt = Math.sqrt(i); 
     return sqrt == Math.floor(sqrt) && sqrt*sqrt == i; 
    } 

jedoch tun würde, das ist wie 6.25 für Zahlen nicht funktionieren würde, was in der Tat ein perfektes Quadrat ist.

+2

Was ist ein "perfektes Quadrat" in Bezug auf Dezimalbrüche? Ein Quadrat einer endlichen Dezimalfraktion? In binär? Beachten Sie, dass '0.1 * 0.1' in Fließkommazahlen zu' 0.010000000000000002' führt, da '0.1' nicht exakt dargestellt werden kann. – LutzL

Antwort

1

Zuallererst würden Sie genaue Darstellung solcher Zahlen benötigen. Wahrscheinlich möchten Sie nach bestimmten Dezimalstellen abgeschnitten werden. Dann multiplizieren Sie die Zahl mit der ganzen Potenz von 100, bis Sie eine ganze Zahl erhalten. Überprüfen Sie, ob die ganze Zahl quadratisch ist oder nicht.

1

Ich werde Ihre Behauptung interpretieren, dass 6.25 ein perfektes Quadrat ist, weil es das Quadrat einer rationalen Zahl ist (Zahlen der Form p/q, wobei p und q beide ganze Zahlen sind).

Dies unterscheidet sich von Santosh Linkhas Lösung, wo ein perfektes Quadrat ein Quadrat einer ganzen Zahl mal eine negative Potenz von 10

Der wesentliche Unterschied ist, zu sein, ist, dass ich nehmen 1/9 = 0.111111... in Betracht ziehen würden, da ein perfektes Quadrat sein es ist 1/3 = 0.33333... im Quadrat.

Der interessante Teil dieses Problems ist, dass alle Doppel sind rationals, aber nicht alle Rationals sind ausdrückbar wie verdoppelt.

Was ich vorschlagen, ist das Folgende: Finden Sie heraus, ob es eine gute rationale Annäherung an die Quadratwurzel des Wertes gibt - Algorithm for simplifying decimal to fractions ist ein wirklich guter Ausgangspunkt.

Verwandte Themen