PHP floating point Precision arithmetic

Source: Internet
Author: User
Tags mathematical functions square root

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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.