c++ - 类里面大量数学运算的测试

标签 c++ unit-testing math

有没有一种方法可以轻松地测试类中的函数以获得正确的结果?我的意思是,我一直在查看 google test 单元测试,但似乎更多的是在工作类和函数中发现失败,而不是在预期结果中。

例如,从数学理论可以知道所有数字的平方根是多少,现在你想检查一个 sqrt 函数,寻找浮点精度错误,然后你还想检查很多使用 float 的函数并寻找任何精度错误,有没有办法让它变得简单快捷?

最佳答案

我能想到2个直接的解决方案

1)

测试数学函数准确性的最简单方法之一类似于微积分中用作极限定义工作的方法。取要测试的值,然后还使用两边都“接近”的值。我听说过极限分析和单元测试之间的类比,但请记住,如果您追求速度,这将不是您的最佳选择。并且这仅适用于持续操作,并且此类比仅适用于定义工作

所以您要做的是为每个函数定义一个“limitDomain”变量(这是因为某些操作比其他操作更准确,以便推理查找 [function] 的泰勒逼近),然后将其用作您的限制器。然后测试:低、高,然后是值本身,然后在给定的误差范围内取所有三者的平均值,

float testMathOpX(float _input){
    float low = 0.0f;
    float high = 0.0f;

    low = _input - limitDomainOpX;
    high = _input + limitDomainOpX;

    low = OpX(low);
    _input = OpX(_input);
    high = OpX(high);

    // doing 3 separate averages with division by 2 mains the worst decimal you will have is a trailing 5, or in some cases a trailing 25
    low = (low + _input)/2
    high = (_input + high)/2;
    _input = (low + high)/2
    return _input;
}

2)

我能想到的另一种方法更像是一种值表方法,即您获取输入,然后检查它在操作域中的位置,如果它位于某些值内,那么您使用值(value)置换。要意识到的是,您需要提前做很多工作才能获得这些值表,然后它就变成了对您以以下形式获取的值的域测试:

if( (_input > valLow) && (_input < valHigh)){
     ... replace the value with an empirically found value
}

问题在于您需要找到那些凭经验发现的值。

关于c++ - 类里面大量数学运算的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275885/

相关文章:

c++ - 模板特化示例

javascript - 如何测试传递的函数?

algorithm - 如何在不使用内置函数的情况下计算数字的平方根?

javascript - 将 if 语句内的逻辑重构为最低限度

c++ - 删除的构造函数

C++:根据 struct 的整数之一对 vector <struct>(其中 struct 有 2 个整数)进行排序

c++ - 此代码是否正确同步?

javascript - 使用 QUnit 测试 JS 方法是否抛出 RangeError

c++ - 本地静态对象如何控制 C++ 中的编译?

c - 具有整数溢出条件的整数的反转