php - 如何在 PHP 中模拟单精度浮点运算?

标签 php floating-point precision

我需要将一个简单的 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.343750122868.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 个选择:

  1. 通过编写一个 php 扩展来创建您自己的类 C 函数:http://www.google.com/search?q=writing+php+extensions

  2. 通过函数 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/

相关文章:

php - DB_PREFIX 和针对 SQL 注入(inject)和其他攻击的安全性

php - MYSQL 计数和连接查询

c - 函数在 C 中分配不正确的浮点值

c - 为什么在转换为 int 之前将 double 表达式存储在变量中会导致与直接转换不同的结果?

python - 如何获取 np.array 的准确值?

double - 双类型的 OpenCL 问题

php - 登录后如何返回重定向页面(codeigniter)?

php - Ajax post 请求安全

c - 在 C 中实现 ceil()

precision - 有没有办法在 Octave 中打印至少 20 位有效数字?