首页 > 解决方案 > 我应该检查相对误差还是百分比相对误差?

问题描述

我优化了exponentialexp 函数。我正在检查关于标准数学exp函数的输出。

Res_opt并且Res_std是我的两个输出。

我首先检查了绝对错误:

Abs_error = abs(Res_opt - Res_std )

我把MAX_DEV = 0.500000(通过考虑我的算法)

并检查:

  if(Abs_error > MAX_DEV){
     printf("Error message").
     return 0;
   }

在少数情况下,这Abs_error会大于0.50000价值并且我的测试用例失败(但我觉得对于该输入,派生结果很好,因为它是一个极端情况)。

所以我决定检查相对误差。

但我的问题是,我应该使用以下逻辑检查相对误差还是百分比相对误差 -

ACC_BAND = 0.400000000000000;
double min_acc_range = 1 - ACC_BAND;
double max_acc_range = 1 + ACC_BAND;

Relative_error =   abs(Res_opt - Res_std)/Res_std ;

if ((Relative_error < min_acc_range) || (Relative_error > max_acc_range)) {
 printf("Error message");
}

或者

Percentage_Relative_error =   1 - (abs(Res_opt - Res_std)/Res_std)*100 ;

if ((Percentage_Relative_error < min_acc_range) || (Percentage_Relative_error > max_acc_range)) {
 printf("Error message");
}

标签: cerror-handling

解决方案


你没有测量错......这都是关于准确性的。 在这里你使用Absolute Error。但是您可以使用Percentage Relative ErrorRelative Error

相对误差百分比是以百分比表示的相对误差度量。在平均情况下,它们的最终精度将相同。

但好的做法取决于你的价值限制。

在较小值的情况下,百分比相对误差很好,因为1.02.0并不接近您的上限值10.0

在较大值的情况下,在1000000710000008附近的地方,相对误差必须更好。

因此,取决于您可以决定的价值限制。


推荐阅读