小林:浮点数的定义决定它的绝对精确度会随着其代表的值变化, 所以比较两个浮点数的最好方法就要利用一个精确的阈值。这个阈值和作比较的浮点数值大小有关。
不要用下面的代码:
double a, b;
…
if (a == b) /* 错!*/
要用类似下列的方法:
#include <math.h>
if (fabs(a – b) <= epsilon * fabs(a))
epsilon 被赋为一个选定的值来控制 “接近度”。你也要确定 a 不会为 0。
读者:怎样取整数?
小林:最简单、直接的方法:(int)(x + 0.5)这个方法对于负数并不正常工作。
可以使用一个类似的方法:(int)(x < 0 ? x – 0.5 : x + 0.5)
正文完