【问题标题】:What values to benchmark and check over the complex plane for a math function?对数学函数的复平面​​进行基准测试和检查的值是什么?
【发布时间】:2013-10-19 01:16:31
【问题描述】:

考虑一个复杂的 C 数学函数 cfunction(z),它接受一个复杂的参数 z=x+iy。我想运行一个自动测试来检查这个函数在复平面上的结果。

为此,脚本将为值矩阵打印此函数的结果:例如x in [-inf, 0, inf] 和y in [-inf, 0, inf] 的所有组合。

那么如果我对x in [list] 和y in [list] 执行此测试,我应该在[list] 中输入什么值来有效地检查函数在复平面上的有效性?

我想到了类似的东西:list = [-inf, -1., -0., 0., 1., +inf, NaN],但我认为这种检查是一个众所周知的问题,一些库可能已经用更详尽的方法解决了这个问题。

备注:我认为该函数不具有任何对称性或特定值。

【问题讨论】:

  • 您想“检查复平面上的有效性”。这意味着什么?那个 cfunction(z) 实际上为所有 z 返回一个复数(而不是运行时异常)?有无数个点要检查,所以你不能全部检查。对于您测试的那些,您如何“检查”它们?

标签: c algorithm math testing complex-numbers


【解决方案1】:

有些想法太大了,无法评论。

在您的列表中:list = [-inf, -1., -0., 0., 1., +inf, NaN],可以添加:

随机集合(可能 100 个)
通过在下面的union 中填写u64 字段来生成,并抛出非有限的数字。

经典常量

M_PI
e

更多特殊值

union {
  uint64_t u64;
  double d;
} sNaN, qNan;
// http://en.wikipedia.org/wiki/QNaN#Signaling_NaN
sNaN.u64 = 0x7ff0000000000001;
// http://en.wikipedia.org/wiki/QNaN#Quiet_NaN
qNaN.u64 = 0x7ff1000000000000;
// Max/Min float
DBL_MAX;    
-DBL_MAX;    
// Small
DBL_MIN
DBL_TRUE_MIN
//
OnePLus = 1.0 + DBL_EPSILON;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2016-01-20
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多