C 是否具有可以测试值是否在预期值公差范围内的函数,如果不是,我该如何创建一个函数?

Does C have functions that can test if value is within tolerance of an expected value, if not how do I create one?

我是 C 语言的新手,最近我有一个有趣的作业是在玩弄科学数字。

作业是实现几个函数,将重量单位转换为其他单位,然后将不同的重量单位相互比较。

我的代码按预期工作,但是由于使用 1e+6 等科学数字进行计算 我的 if 比较失败了他们的任务。

假设我有: A = 1 公斤

B = 2.2046226218 磅

在比较它们之前,我将 A 转换为 lbs。

但是数据丢失并且 1 公斤变得不等于 2.2046226218 磅

稍后在代码中: 如果(a == b)//=> returns false

然而,这不是代码应有的工作方式。

因此我的想法是实现以下功能。

像这样:

bool inToleranceRange( a , b , tolerance_range){ // returns true if a is in + || - tolerance range of b
  //TO DO
}

// later in code

int value = inToleranceRange(a, b, 1);
if( value == 1){
  printf("\na is equal to b");
}

虽然在开始之前,我想问一下 C 中的标准库是否提供了完成此任务的功能?如果不是,您会建议我如何继续?

bool inToleranceRange(double a, double b, double tolerance_range) {
    // returns true if a is in + || - tolerance range of b
    return (fabs(a-b) <= fabs(tolerance_range));
}

需要#include <math.h>

要创建更通用的(伪)函数,您可以使用 C 编译器包含的宏生成器:

// definition
// x - value to check
// r - reference value
// t - tolerance
#define IsInTolerance(x, r, t) (((x) >= ((r) - (t))) && ((x) <= ((r) + (t))))

// usage examples
if (IsInTolerance(4.9, 5, 0.5))
    printf("In tolerance.\n");
if (!IsInTolerance(4, 6, 1))
    printf ("Not in tolerance!\n");

宏生成器内置(或以其他方式包含)在每个 C 编译器环境中。