我试过
$x = cos(deg2rad($angle));
但是当角度为90度而不是0度时它返回6.12323399574E-17。 我读到这是一个浮点问题,但是有解决方法吗?
答案 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);