我需要将一个简单的 C 程序移植到 PHP。目前我们必须启动进程并解析它的输出。该程序非常简单,但对于使用 float
的算法来说很重要,因为错误会累积起来,结果会很不一样。
C 示例:
#include <stdio.h>
int main( void ) {
printf("%f\n", 123456 * (float)0.99524);
printf("%f\n", 123456 * (double)0.99524);
return 0;
}
PHP 示例:
<?php
printf("%f\n", 123456 * 0.99524);
?>
C 示例将生成 122868.343750
和 122868.349440
,而 PHP 将生成 122868.349440
。
如何在 PHP 中获取 C float
结果?
最佳答案
使用内置的 php 函数无法做到这一点。
使用“double”的那个给你真实的结果,100% 精确。 float 错了。
在PHP中float和double是同一个类型,都是double。
如果你需要高精度的结果,总是给出相同的结果,尝试使用 BC Math 模块:http://php.net/bcmath
使用 BC Math 的示例代码:
$result = bcmul("123456", "0.99524", 6); // gives 122868.34944
$result = number_format($result, 6, ".", ""); // 122868.349440 - appending zeros
echo $result;
输出:
122868.349440
如果您真的非常想要与 C 程序中相同的结果,那么您有 2 个选择:
通过编写一个 php 扩展来创建您自己的类 C 函数:http://www.google.com/search?q=writing+php+extensions
通过函数 proc_open() 从 PHP 与您的 C 程序对话: http://www.php.net/manual/en/function.proc-open.php(另见 popen()、exec() 或 shell_exec())
关于php - 如何在 PHP 中模拟单精度浮点运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130688/