-3

私は、5 つの異なる平方根アルゴリズムをテストして 2 の平方根を計算するサイエンス フェア プロジェクトを行っています。(ここで私の質問を参照してください)。

選択肢は 2 つあります。

  • 各プログラムを一定時間実行し、最終結果が 2 の平方根にどれだけ近いかを比較します。
  • 2 の平方根が小数点以下 50 桁まで正確になるまで各プログラムを実行し、以下を使用してかかった時間を比較します。System.nanoTime()

2 番目の方法の欠点は、反復ごとに小数点以下 50 桁まで正確かどうかを確認するプロセスに時間がかかるため、正確な結果が得られないことです。これを行う他の方法があれば、私に知らせてください

最初のものの欠点は、一定時間プログラムを実行する方法がわからないことです。

どのような行動をとればよいですか?

4

3 に答える 3

0

プログラムを一定時間実行する方法がわかりません。

1 つのオプションは、スレッドで x 時間実行する必要があるコードを実行することです。
時間切れになったらスレッドを終了し、スレッド コードにその結果を表示させます。
このようなもの。

import java.io.*;
public class SqrtThread extends Thread{
  private vars.....
  public SqrtThread (double input) { 
    super('sqrtThread');
    this.input = input;
    ....
    this.start();
  }

  public void run() {
    while !(Thread.interrupted) {   
      //Do numberChruching
    }
    //output result
  }           
}

次に、次のような擬似コードを使用してスレッドを開始します。

SqrtThread sqrtThread = new SqrtThread(2); //Will start automatically
start high resolution timer
while (time has not elapsed) {
  sleep for very short period;
}
sqrtThread.interrupt(); //stop the thread.

非常に短い睡眠を実際にどのように行うかは課題の一部なので、それはあなたに任せます.

于 2013-10-14T20:00:49.760 に答える
0

テストにかかる時間は、各メソッドで同じです。したがって、比較に興味がある場合、これは不利ではありません。また、テストにかかる時間はそれほど重要ではないと思います。

さらに、とにかくそのようなテストが必要です。通常、特定のエラーまでの結果に関心があります。必要な時間は他の多くのもの(CPU、JVMなど)に依存するため、既知の時間で得られる未知の精度ではありません。これから、2番目のアプローチへの投票です。

于 2013-10-14T20:18:26.850 に答える