例如:如果我知道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);
}
}
}
}
但程序有一些問題:
- 它只能搜索-10到10的結果,因爲
Float.MIN_VALUE
和Float.MAX_VALUE
之間的搜索太慢 - 我知道9 + 1.125 = 9×1.125,但即使我設置的每個增量是0.0001,該程序無法找到任何結果
- 有時周圍的真實結果
程序打印多個結果是否有任何其他快方法或更好的算法來查找結果?
[代數?](http://www.wolframalpha.com/input/?i=Solve%5Bx%2By%3D%3Dx*y% 2Cy%5D&dataset =) –
知道爲什麼它不能用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 –
您還應該對浮點數和「MIN_VALUE」和「MAX_VALUE」以及特別是Epsilon的含義進行一些研究。在浮點數學中,有一個閾值,其中'x + y == x'如果'y' <<'x'這個閾值取決於兩個數值的大小的差異 –