Project

General

Profile

Feature #15811

Updated by nobu (Nobuyoshi Nakada) over 5 years ago

# Background #Background 

 Equal comparison method between 2 float numbers returns unexpected results sometimes. Therefore, a relative comparison method is needed! 

 # Proposal #Proposal 

 A relative equal comparison method has been written based on a Python project! This method gives the approximation for the equal comparison based on two values: realative tolerance and absolute tolerance. Near zero value will also be considered carefully! 

 # Implementation #Implementation 

 The function for that would be called close? 
 `close?(a, close?(a, b, rel_tol, abs_tol)` abs_tol) 

 `a` a and `b`: b: are the two values to be tested to relative closeness 

 `rel_tol`: rel_tol: is the relative tolerance -- it is the amount of error allowed, relative to the larger absolute value of a or b. For example, to set a tolerance of 5%, pass tol=0.05. The default tolerance is 1E-9, which assures that the two values are the same within about 9 decimal digits. rel_tol must be greater than 0.0 

 `abs_tol`: abs_tol: is a minimum absolute tolerance level -- useful for comparisons near zero. 

 # Evaluation #Evaluation of your implementation 

 By default, relative tolerance is 1E-9 which is relatively precise enough to compare two float numbers. However it can also be adjusted in case higher accuracy is requested. The absolute tolerance is by default 0.0 and need to be set in case of near-zero numbers. 

 # Discussion #Discussion 

 There are some test cases available for the method which has approved the accuracy of the method. BigNumbers and integers are also tested. However, more test cases are still needed to assure even better the accuracy of the method. 

 # Gist #Gist  

 Relative equal comparison 

 https://gist.github.com/yennguyenh/63d5e7a11f354f796b43ada037c4b2c5 

 Test cases 

 https://gist.github.com/yennguyenh/2e81dc72b310cb9d886a82faf3d536ef

Back