具有浮点的Php精度 - 复方程= 1

时间:2008-11-12 18:05:55

标签: php math floating-point equation

我有以下等式

  

1 - ((。5 * 0.83333333333333)^ 2 +(。5 * 0.83333333333333)^ 2 +(。* *(1 - 0.83333333333333))^ 2 +(。* *(1 - 0.83333333333333))^ 2)

在Php5中,这导致答案为1而不是.63(在两台机器上,OSx和Centos)。我应该专门使用Php的bc数学函数来做这样的方程吗?

3 个答案:

答案 0 :(得分:5)

我想也许你应该使用pow()而不是xor operator (^):)

答案 1 :(得分:1)

不是一个等式,而是那个语义。另外,我怀疑你的意思是xor,所以我认为这不是你想要的。无论如何,你能使用理性算术吗?

0.83333可以转换为分数(假设3是重复小数):

 83.3333333 = 100x
  8.3333333 = 10x
 -----------------
         75 = 90x
     x = 75 / 90 = 0.83333...

这样你只处理整数,只要两者都没有溢出(你可以在操作之前和之后通过GCD减少)那么你应该没事。

答案 2 :(得分:1)

<?php

$hugeDamnEquation = pow(1 - ((.5 * 0.83333333333333), 2) + pow((.5 * 0.83333333333333), 2) + pow((.5 * (1 - 0.83333333333333)), 2) + pow((.5 * (1 - 0.83333333333333)), 2));

echo $hugeDamnEquation;

?>