如何让php cos函数返回正确的值?

时间:2011-06-05 14:10:36

标签: php floating-point trigonometry cosine

我试过

$x = cos(deg2rad($angle));

但是当角度为90度而不是0度时它返回6.12323399574E-17。 我读到这是一个浮点问题,但是有解决方法吗?

3 个答案:

答案 0 :(得分:10)

6.1E-17 几乎零[*]。如果您需要将结果实际比较为零,则在浮点数学中,您应该检查它是否在所需值的某个容差范围内,因为大多数数字都无法正确表示。

$x = cos(deg2rad($angle));
$is_zero = (abs($x) < 1e-10);

严格地说,当然,零实际上是可以在浮点中正确表示的数字。真正的问题是pi / 2.0不能,因此cos函数的输入不是“正确的”。

[*]把它放在上下文中,取1 AU的比例(从太阳到地球的平均距离),相当于0.0092 毫米,或大约{{3一个人的头发...

答案 1 :(得分:4)

6.12323399574E-17是一个非常小的浮点数(小数点后面跟着一个6后的17个零),几乎与0无法区分。如果你正在处理浮点(任何余弦函数都必须),你可以'避免这样的问题。如果需要将浮点数与零进行比较,则必须使用误差条(即,此数字在零值的某个值范围内),而不是绝对比较,即使使用比余弦更简单的函数。如果你只需要对结果进行一些数学运算(添加它,乘以它,无论如何),它的行为几乎就像零,所以你不必担心。

答案 2 :(得分:1)

试试这个

$x = round(cos(deg2rad($angle)), 3);