5

**私の推論を説明する背景情報に興味がない場合は、私の質問の最後までスキップしてください。

次のような多項式の単体テストを実行するために、プログラムに読み込む必要がある多項式のセットがあります。

  • 合成部門
  • 添加
  • 減算
  • 規模
  • 乗算
  • ルーツ

そのため、BRLCAD で使用される関数をテストするために、さまざまな数値を入力できるようにする必要がありますが、数値を読み取るための効率的な解決策を見つけるのに苦労しています。私の現在のアプローチ:

コマンドラインを考えると:

./unit_test sd 2 3 4 8 1 4 5

  • sd - 合成除算を実行します
  • 2 - 最初のポリゴンの次数
  • 3,4,8 - 3x^2 + 4x + 8
  • 1 - 2 番目のポリゴンの次数

この形式で一連の数値を読み取るアルゴリズムを作成するのは面倒で、他の人が理解するのは非常に混乱します。さらに、比較する答えとして読み取る他の 2 つの多項式をまだ実装していません。(これはオープン ソースであるため)ファイル、私は自分の作品にある程度の透明性を持たせたいと思っています)。

if(strcmp(argv[1],"sd") == 0){

    poly_eqn1.dgr = atoi(argv[2]);
    /* start at argv[3], run degree count plus one times */
    for(counter = 0; counter < (eqn1.dgr + 1); counter++)
        poly_eqn1.cf[counter] = atof(argv[counter+3]);

    poly_eqn2.dgr = atoi(argv[4 + poly_eqn1.dgr]);
    /* start at end of degree one counter */
    for(counter = 0; counter < (dgr2 + 1); counter++)
        poly_eqn2.cf[counter] = atof(argv[counter+5+dgr]);

    /* grab the answer from end of data */

    return test_synthetic(//input proper data...);
}

sscanf最大次数が設定されている場合、多項式を読み取るのに使用する方が効率的ですか? 最初のメソッドを書いた後、sscanf を使用することを考えましたが、上からさらに 2 つの多項式を読み込むのではなく、そのような方法で使用する価値があるかどうかはわかりません。

多項式の最大次数が 4 の場合

./unit_test sd 2,0,0,2,4,5 1,0,0,0,2,3

  • 2,0,0,2,4,5 - 次数 2、0x^4 + 0x^3 + 2x^2 + 4x + 5
4

2 に答える 2

5

もし私があなただったら、人間が読める形式であなたのパラメータをサポートするために一生懸命努力します.

たとえば、次の形式で入力を解析できる必要があります。

./unit_test "(3*x^2+4*x+8)/(4*x+5)"

確かに、この入力を理解するには字句パーサーを作成する必要があるかもしれませんが、ユーザーの観点から理解するのが最も簡単です。

于 2012-12-20T03:05:29.810 に答える
3

コマンドライン引数を処理するだけであれば、効率について心配する必要はありません。これは、タスクに適した最も単純で簡単な方法で行ってください。実際の数を処理するアルゴリズムを使用したタイトなループで、重要な効率について心配することに時間を費やしてください。

于 2012-12-20T03:00:50.517 に答える