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 编译器环境中。
我是 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 编译器环境中。