基础知识 | 每日一练(130)

读者:有什么好的方法来验对浮点数在 “足够接近” 情况下的等值?

小林:浮点数的定义决定它的绝对精确度会随着其代表的值变化, 所以比较两个浮点数的最好方法就要利用一个精确的阈值。这个阈值和作比较的浮点数值大小有关。

不要用下面的代码:

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)

正文完