How to Mitigate Floating Point Errors in Python?

Susan Sarandon
Release: 2024-10-21 15:08:30
Original
825 people have browsed it

How to Mitigate Floating Point Errors in Python?

Avoiding Floating Point Errors in Python

In the realm of programming, it's essential to understand the intricacies of floating point calculations, as they can introduce unexpected errors if not handled properly. This article explores a practical example that highlights the pitfalls of floating point arithmetic.

The Square Root Problem

Consider a Python function designed to approximate square roots:

<code class="python">def sqrt(num):
    root = 0.0
    while root * root < num:
        root += 0.01
    return root
Copy after login

Using this function, we encounter surprising results:

>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>
Copy after login

Floating point arithmetic explains these inaccuracies. When representing fractional numbers, computers store them as a combination of integer and exponent. Due to limitations in this representation, certain decimal values cannot be represented exactly, leading to approximations.

Understanding the Error

In the code above, the issue lies in the increment used to increase the root value. While we intend to add a value of 0.01, the actual value stored in the floating point register is slightly different and greater than 0.01.

Addressing the Error

To avoid floating point errors, various approaches can be employed:

  • Using the Decimal Module:
    The Decimal module in Python provides more precise decimal arithmetic. By replacing float with Decimal in the code, we get more accurate results:
<code class="python">from decimal import Decimal as D

def sqrt(num):
    root = D(0)
    while root * root < num:
        root += D("0.01")
    return root
Copy after login
Now, the function returns precise results, such as:

```
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
```
</code>
Copy after login
  • Using Non-Floating Point Increments:
    If using the Decimal module is not an option, another approach is to use floating point values that are exactly representable in binary, such as 1/2**J. This involves more complex code, but it ensures accurate increments.
  • Employing Numerical Analysis Techniques:
    Numerical analysis offers specialized methods for handling complex mathematical calculations. Techniques like Newton's method can provide precise square root approximations.

The above is the detailed content of How to Mitigate Floating Point Errors in Python?. For more information, please follow other related articles on the PHP Chinese website!

source:php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!