jstewmc/almost-equals

比较浮点数是否相等

v0.1.0 2017-03-06 00:23 UTC

This package is auto-updated.

Last update: 2024-08-29 04:42:55 UTC


README

比较浮点数是否相等。

namespace Jstewmc\AlmostEquals;

// instantiate the service
$service = new AlmostEquals();

// compare stuff!
$service(1/10, 0.1);  // returns true (0.1 === 0.1)
$service(2/10, 0.1);  // returns false (0.2 !== 0.1)

由于浮点数在内部存储的方式,它们不应用于比较等价性。它们具有有限的精度,许多可以用十进制表示为浮点数的数字(例如,0.10.7)在二进制中没有确切的表示。

Epsilon(ε,即epsilon,epsilon值)

为了测试浮点值是否相等,使用一个上限值来限制由于舍入造成的相对误差。这个值被称为机器epsilon,是计算中可以接受的最大的差值(不包括)。

在实例化服务时可以设置epsilon值。如果省略,默认为0.00001。请注意,epsilon值应该与您比较的值的差异成比例。如果您的应用程序对非常小的差异很敏感,请使用一个非常小的epsilon。

namespace Jstewmc\AlmostEquals;

// defaults to an epsilon of 0.00001
$service = new AlmostEquals();

$service(1/10, 0.1);      // returns true
$service(0.10002, 0.1);   // returns false (0.00002 > 0.00001)
$service(0.100002, 0.1);  // returns true (0.000002 < 0.00001)

整数

为了提高易用性,此库还支持整数比较。在进行比较之前,它将使用PHP的默认类型强制转换为浮点数。

这就是全部内容!

作者

Jack Clayton

许可证

MIT

版本

0.1.0,2017年3月5日

  • 首次发布