0

aここに私の単純な方程式カウンターがあります。これは、2 つの変数を持つ方程式をカウントします。これは、変数と変数の多くの組み合わせ (400 万または 1600 万) を試すことに基づいていbます。コードはうまく機能し、正確にカウントされます。しかし、変数bを doubleに変更しようとしたため行が10回ごとにb=b+0.1変数を1.0に設定することを保証すると予想していました。または、別の値で変数を上げる必要がありますか?(すべての変数を double に変更しようとしました)。提案をありがとう!bbb

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Buffer{
static int a;
static double b;
static BufferedReader reader;
static String query;
static int range;
static int result;

public static void main(String[] args)throws IOException{
    reader=new BufferedReader(new InputStreamReader(System.in));

    System.out.print("Choose speed of test(fast or slow):");
    query=reader.readLine();

    if(query.equals("fast"))
        range=2000;
    else
        range=4000;

     //START THE TEST//       
    while((a+b)!=26000){
        b=b+0.1;
        if(b==range+1){
            b=0;
            a=a+1;
        }
        if((a+b)!=26000)
            System.out.println("a- "+a+", "+"b- "+b+"=false.");

        if((a+b)==26000){
            System.out.println("a- "+a+", "+"b- "+b+"=true.");
            System.out.println("\n"+"Done.You can possibly solve this equation, if a= "+a+" and b= "+b+".");
        }
        if(a==range&&b==range&&(a+b)!=26000){
            System.out.println("\n"+"Tested "+a*b+" options.Solution not found.");
            System.exit(0);
        }
    }   
}
}
4

3 に答える 3

1

あなたが扱う問題は表現エラーです。double 型は一部の値を表すことができません。

この状況の典型的な解決策は、BigDecimal または Integer 型を使用することです。

于 2013-07-31T16:26:14.763 に答える
1

ここにいる全員が別の解決策を提供してくれましたが、なぜデータ型が機能しなかったのかを理解する必要があると思いdoubleます。

問題は にありますBinary representation。小数については、正確な形式で表されていません。たとえば、次のように言います。

10 is represented as 1010 in binary しかし

0.10 is 0.00011001100110011001100110011001 and still going on.....

したがって、エラーは二重に発生します。他の人が示唆しているように、BigDecimal を選択してください。

これらのリンクから、同じことについて詳しく知ることもできます。

丸め誤差

ダブルの追加

それが役立つことを願っています。

于 2013-07-31T16:51:04.340 に答える