Php,用插入符号(^)计算指数失败

Posted

技术标签:

【中文标题】Php,用插入符号(^)计算指数失败【英文标题】:Php, calculating exponent with caret (^) fails 【发布时间】:2013-01-17 02:44:03 【问题描述】:

Wolfram Alpha 表示将给出以下公式的正确结果:

((0.0004954*($current^2))-((0.935*$current)+378.486))-
((0.0004954*($desired^2))-((0.935*$desired)+378.486));

但是当我在 php 中运行它时,它并没有给出正确的答案,为什么不呢?

$current = mysql_escape_string($_POST['current']);
$desired = mysql_escape_string($_POST['desired']);
$username = mysql_escape_string($_POST['username']);
$password = mysql_escape_string($_POST['password']);
$email = mysql_escape_string($_POST['email']);
$ip = $_SERVER["REMOTE_ADDR"];
$time = time();
$elo = $desired - $current;
if($current < 1200) 
  $price = ($elo/100)*30;
 elseif($current < 1400) 
  $price = ($elo/100)*35;
 elseif($current < 1901) 
  $price = ((0.0004954*($current^2))-((0.935*$current)+378.486))-((0.0004954*($desired^2))-((0.935*$desired)+378.486));

【问题讨论】:

【参考方案1】:

^ 运算符是 bitwise 运算符。

您需要使用pow。

如果您只是想对一个值求平方,那么您可以将它本身相乘,$current * $current

【讨论】:

【参考方案2】:

您需要使用pow($number, $exponent) 函数。

在 PHP 中,^doesn't mean an exponent。

$price = ((0.0004954*(pow($current, 2)))-((0.935*$current)+378.486))-((0.0004954* (pow($desired, 2)))-((0.935*$desired)+378.486));

【讨论】:

【参考方案3】:

^ 是 XOR 位运算符

您可以使用 Supericy 提到的 pow,但也可以只使用 ** 运算符作为简写。

【讨论】:

以上是关于Php,用插入符号(^)计算指数失败的主要内容,如果未能解决你的问题,请参考以下文章

float在计算机的存储方式

第三章 计算机进行小数运算时出错的原因

matlab的符号计算

如何阅读/改进 PHP 计算的 C.R.A.P 指数

ieee754单精度浮点数 表示方法

第3课 浮点数的秘密