BC is the abbreviation for binary calculator. The parameters of the bc* function are the operands plus an optional [int scale], such as String Bcadd (String $left _operand, String $right _operand[, int $scale]), assuming scale does not provide , the default value of Bcscale is used. Here the large number is directly represented by a string of 0-9, and the result of the calculation is also a string.
Bcadd-adds two high-precision numbers
bccomp-two high-precision numbers, return-1, 0, 1
bcdiv-divides two high-precision numbers
Bcmod-seeking high precision digital remainder
bcmul-multiply two high-precision numbers
bcpow-High Precision Digital exponentiation
Bcpowmod-to find the high-precision digital exponentiation, number theory is very often used
bcscale-Configure the default number of decimal places, equivalent to the "scale=" in the Linux BC
bcsqrt-to find the square root of high precision number
bcsub-to subtract two high-precision numbers
First look at a piece of code:
<?
Php
$a = 0.1;
$b = 0.7;
Var_dump (($a + $b) = = 0.8);
The printed value is Boolean false
Why is this?
The PHP manual has the following warning message for floating point numbers:
Warning
Floating point Accuracy
It is obvious that a simple decimal score like 0.1 or 0.7 cannot be converted to an internal binary format without losing a little bit of precision. This can result in confusion: for example. Floor ((0.1+0.7) *10) typically returns 7 instead of 8 as expected. Because the internal representation of the result is actually similar to the 7.9999999999 ....
This is related to the fact that it is impossible to accurately express certain decimal fractions with a finite number of digits.
For example, the decimal 1/3 becomes 0.3333333. . .。
So never believe that the floating-point number is accurate to the last, and never more than two floating-point numbers are equal. Assuming that there is a need for higher precision, arbitrary precision mathematical functions or GMP functions should be used
So the above formula should be rewritten as
<?php
$a = 0.1;
$b = 0.7;
Var_dump (Bcadd ($a, $b, 2) = = 0.8);
This will solve the problem of floating point calculation.
PHP floating point Precision arithmetic