PHP优化:整数而不是浮点数

时间:2018-07-20 14:12:01

标签: php optimization floating-point int precision

我有一个PHP脚本,需要进行大量的计算,因此循环执行。 因此,我必须优化代码,因为一个AJAX请求会花费很多时间(例如20秒)。 当我查看“ echo”文本(用json_encode编码)时,我看到数字有12个十进制数字。我不需要这种精度。我需要整数(或最多3个十进制数字)。 我可以降低计算精度以缩短请求时间吗?

对不起,我的英语;)

2 个答案:

答案 0 :(得分:0)

如果您想减少发送的所有数字,则可以使用array_mapbcdiv来降低精度。

但是,使用array_map将花费线性时间,因此最好将数据插入要以bcdiv格式发送的数组中:

$data = [0.123214, 1.21321424, 0.312321, 3.213213123]; // Lets say this is the data you are sending
$small = array_map(function($num) {
    return bcdiv($num, 1, 3); // Cut the decimal to 3 places
}, $data);

print_r($small);

输出

Array ( [0] => 0.123 [1] => 1.213 [2] => 0.312 [3] => 3.213 )

答案 1 :(得分:0)

对于任何解释语言(例如PHP),单个操作的速度并不会像 个操作那样产生很大的差异。

在现代计算机上,浮点运算仅比定点运算稍慢。同时,解释器查找和修饰变量​​的开销是实际操作的数十倍。

如果对于整数,您需要在操作数量上添加类似round(),则添加它的成本可能比实际的固定vs浮点CPU指令节省的成本要多。< / p>

您提到周围传递数字。发送更多字节(用于更多小数位)的网络开销也是一个因素。

这里有一些数字。警告:它们可能明显处于“关闭”状态。但这为您提供了一种比较事物的方法。全部都在十亿分之一秒内。

0.5 Integer add
1.0 double precision add (16 significant digits)
30 PHP overhead for either add
30 PHP time to perform virtually any simple action
200 the time to send one more byte across to/from a remote site

但是,您还需要计算它们的频率...

如果要进行矩阵算术运算,则可能有成千上万的算术运算。在这种情况下,您正在寻找30ns *一些大数字。那将是一个很大的数字。

如果您要通过AJAX发送额外的5个字节,该字节太小而无法测量。

以另一种方式看待它:

  • 通过摆弄“低级”的东西(例如int vs float),可以将速度提高百分之几。
  • 通过找到更好的算法,您可以将程序加速一个“数量级”。

课程:专注于大局;还有更多的钱可以买。