[ https://issues.apache.org/jira/browse/SPARK-2479?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
DB Tsai updated SPARK-2479: --------------------------- Description: Floating point math is not exact, and most floating-point numbers end up being slightly imprecise due to rounding errors. Simple values like 0.1 cannot be precisely represented using binary floating point numbers, and the limited precision of floating point numbers means that slight changes in the order of operations or the precision of intermediates can change the result. That means that comparing two floats to see if they are equal is usually not what we want. As long as this imprecision stays small, it can usually be ignored. See the following famous article for detail. http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ For example: float a = 0.15 + 0.15 float b = 0.1 + 0.2 if(a == b) // can be false! if(a >= b) // can also be false! was: Due to rounding errors, most floating-point numbers end up being slightly imprecise. As long as this imprecision stays small, it can usually be ignored. Otherwise, different machine may have different rounding errors which will cause some of false negative tests. See the following article for detail. http://floating-point-gui.de/errors/comparison/ For example: float a = 0.15 + 0.15 float b = 0.1 + 0.2 if(a == b) // can be false! if(a >= b) // can also be false! > Comparing floating-point numbers using relative error in UnitTests > ------------------------------------------------------------------ > > Key: SPARK-2479 > URL: https://issues.apache.org/jira/browse/SPARK-2479 > Project: Spark > Issue Type: Improvement > Reporter: DB Tsai > > Floating point math is not exact, and most floating-point numbers end up > being slightly imprecise due to rounding errors. Simple values like 0.1 > cannot be precisely represented using binary floating point numbers, and the > limited precision of floating point numbers means that slight changes in the > order of operations or the precision of intermediates can change the result. > That means that comparing two floats to see if they are equal is usually not > what we want. As long as this imprecision stays small, it can usually be > ignored. > See the following famous article for detail. > http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ > For example: > float a = 0.15 + 0.15 > float b = 0.1 + 0.2 > if(a == b) // can be false! > if(a >= b) // can also be false! -- This message was sent by Atlassian JIRA (v6.2#6252)