我不确定该怎么命名。
我正在检查两个浮点数的值是否相同。如果我使用printf()
或NSLog()
,则值会返回0.750000。但是,像if (value1 == value2) { return TRUE; }
这样的行不起作用。我可以假设实际上浮点数超出了7位小数,printf()
/ NSLog()
不能返回超过7位小数的值。
我尝试使用谷歌搜索方式来查看如何将浮点数减少到较小的小数位数,或者只是将其转换为其他数据类型,但到目前为止我没有得到这样的运气。
答案 0 :(得分:4)
您可能想要查看float.h
(http://www.gnu.org/software/libc/manual/html_node/Floating-Point-Parameters.html)以获取epsilon的非任意定义。特别是FLT_EPSILON
和FLT_DIG
。
答案 1 :(得分:1)
您可以决定epsilon是数字等于的最大值。像
#define EPSILON 0.0001
if (fabs(floatA - floatB) < EPSILON) { retun TRUE; }
fabs(x)
会返回double
x 的绝对值。
您可能还想使用double
代替float
数据类型(double
是float
的两倍)。
答案 2 :(得分:0)
比较浮点数时,需要使用公差:
if (Abs(value1 - value2) < epsilon)
{
}
其中epsilon是一个值,例如0.000001