Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rounding Errors?

In my course, I am told:

Continuous values are represented approximately in memory, and therefore computing with floats involves rounding errors. These are tiny discrepancies in bit patterns; thus the test e==f is unsafe if e and f are floats.

Referring to Java.

Is this true? I've used comparison statements with doubles and floats and have never had rounding issues. Never have I read in a textbook something similar. Surely the virtual machine accounts for this?

like image 256
Humphrey Bogart Avatar asked Jun 06 '09 16:06

Humphrey Bogart


People also ask

What is a rounding error in programming?

A rounding error is the difference between the number that is stored by a computer program and the actual number. Data types are often limited in the number of decimal places that they can store so a rounding error might occur if a number needs to be cut short.


2 Answers

It is true.

It is an inherent limitation of how floating point values are represented in memory in a finite number of bits.

This program, for instance, prints "false":

public class Main {   public static void main(String[] args) {     double a = 0.7;     double b = 0.9;     double x = a + 0.1;     double y = b - 0.1;     System.out.println(x == y);   } } 

Instead of exact comparison with '==' you usually decide on some level of precision and ask if the numbers are "close enough":

System.out.println(Math.abs(x - y) < 0.0001); 
like image 80
Chris Vest Avatar answered Sep 20 '22 02:09

Chris Vest


This applies to Java just as much as to any other language using floating point. It's inherent in the design of the representation of floating point values in hardware.

More info on floating point values:

What Every Computer Scientist Should Know About Floating-Point Arithmetic

like image 20
Ben Schwehn Avatar answered Sep 22 '22 02:09

Ben Schwehn