5

**如果您对解释我的推理的背景信息不感兴趣,请跳到我问题结尾的最底部。

我有一组多项式方程,我需要读入我的程序来执行多项式的单元测试,例如

  • 合成师
  • 添加
  • 减法
  • 规模
  • 乘法

所以我需要能够输入范围广泛的数字来测试 BRLCAD 中使用的功能,尽管我无法想出一个有效的解决方案来读取数字。我目前的做法:

给定命令行:

./unit_test sd 2 3 4 8 1 4 5

  • sd - 执行合成除法
  • 2 - 第一个多边形的度数
  • 3,4,8 - 3x^2 + 4x + 8
  • 1 - 第二个多边形的度数

编写一个算法来读取这种格式的一组数字很麻烦,而且其他人很难理解,而且我还没有实现另外两个多项式作为要比较的答案来读取。(因为这是一个开源文件,我希望我的工作有一些透明度)。

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,但我不确定以这种方式使用它是否值得,而不是从上面再写入两个多项式读取:

给定多项式的最大次数为四

./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 回答