2015-07-06 105 views
-1

例如:如果我知道x,那麼搜索x + y = x * y的結果的最有效方法是什麼?

6+1.2=6*1.2 
5+1.25=5*1.25 

我想嘗試寫一個程序來搜索結果,例如搜索質數:

public class Test{ 
    public static void main(String[] args){ 
     float x=-1.0f; 
     float d=0.0001f; 
     for(float y=-10;y<10;y=y+d){ 
      if(x+y-x*y>=-d && x+y-x*y<=d){ 
       System.out.println(y); 
      } 
     } 
    } 
} 

但程序有一些問題:

  1. 它只能搜索-10到10的結果,因爲Float.MIN_VALUEFloat.MAX_VALUE之間的搜索太慢
  2. 我知道9 + 1.125 = 9×1.125,但即使我設置的每個增量是0.0001,該程序無法找到任何結果
  3. 有時周圍的真實結果

程序打印多個結果是否有任何其他快方法或更好的算法來查找結果?

+6

[代數?](http://www.wolframalpha.com/input/?i=Solve%5Bx%2By%3D%3Dx*y% 2Cy%5D&dataset =) –

+0

知道爲什麼它不能用float或double工作,你必須閱讀[浮點數學是否被破壞?](http://stackoverflow.com/q/588004/995714),[每臺計算機的內容科學家應瞭解浮點算術](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。因爲沒有二進制浮點數值恰好是1.2,7.2或0.0001 –

+0

您還應該對浮點數和「MIN_VALUE」和「MAX_VALUE」以及特別是Epsilon的含義進行一些研究。在浮點數學中,有一個閾值,其中'x + y == x'如果'y' <<'x'這個閾值取決於兩個數值的大小的差異 –

回答

5

代數:

y = x/(x - 1) 

這將是比試圖重複自己的方式向一個答案顯著更快。

正如下面提到的,不要忘了趕x = 0

+1

大多數人會寫爲'y = x/(x-1)' –

+0

好點,我會在 – Wheeldog

+1

中編輯它,當** x = 1 **時提防事實 – crbah

相關問題