2017-06-25 96 views
1

我想檢測double是否是一個完美正方形。檢測一個double是否是Java中的完美正方形

爲了檢測完全平方爲的平方根是一個整數這些數字,我會做類似

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

不過,像6.25這樣就不會換號工作,這確實是一個完美的正方形。

+2

什麼是以小數爲單位的「完美平方」?一個有限小數的平方?在二進制?請注意,在浮點數中,'0.1 * 0.1'導致'0.010000000000000002'爲'0.1',不能準確表示。 – LutzL

回答

1

首先,您需要確切地表示這些數字。可能你會想在某些小數點後截斷。然後乘以100的整數次冪,直到得到一個整數。檢查它的整數是否正方形。

1

我要解釋你的說法,即6.25是一個完美的正方形,因爲它是一個有理數(表格P的數/ q其中p和q均爲整數)的平方。

這不同於桑託什Linkhas解決方案,其中 一個完美的正方形是採取爲整數倍的平方10.

的關鍵區別的負電源是該我會考慮1/9 = 0.111111...是因爲一個完全平方它是1/3 = 0.33333...平方。

這個問題有趣的部分是所有的雙打都是有理的,但並非所有的理性都可以表達爲雙打。

我建議如下:找出是否有一個很好的合理的近似值的平方根 - Algorithm for simplifying decimal to fractions是一個非常好的起點。

相關問題