PHP - 使用浮点进行 Aritmetic 运算

PHP - Aritmetic operations with floating point

提问人:Tomas Cuellar Escalona 提问时间:11/4/2021 更新时间:11/4/2021 访问量:47

问:

我需要执行非常大的数字操作,例如:(-8.3802985809867E + 217 x 4.8047258326981E + 215)

我正在用PHP编写一个系统来求解线性方程矩阵,但是由于数字非常大,因此它给了我NAN或INF。

我使用了普通模块:($a % $b),也是 bc_mod 和 fmod,但两者都不适合我。

如何执行非常大和非常非常小的操作?

php 精度 取模 fmod

评论

2赞 Sammitch 11/4/2021
bcmath 应该为此工作。您应该展示一些代码并解释为什么它不起作用。
0赞 Tangentially Perpendicular 11/4/2021
模数算术只对整数有意义。鉴于浮点数的精度限制,我不明白你怎么能指望用你给出的那些数字来获得有意义的结果。
0赞 Tomas Cuellar Escalona 11/4/2021
谢谢!!!我解决了
0赞 Elikill58 11/4/2021
您可以自我回答以分享您如何解决它!

答:

0赞 jspit 11/4/2021 #1

您可以分别处理尾数和指数。乘法的代码示例:

$a = -8.3802985809867E+217;
$b = 4.8047258326981E+215;
$ap = explode('e',sprintf('%0.15e',$a));
$bp = explode('e',sprintf('%0.15e',$b));
$axb = $ap[0]*$bp[0]."e".sprintf('%+d',$ap[1]+$bp[1]);
//"-40.26503707779e+432"

这里使用的是简单的学校数学:十的幂乘以指数相加。但是,结果不能表示为浮点数。原则上,最好寻找合适的类/库。