From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-4.1 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 7C8161F453 for ; Mon, 29 Apr 2019 11:04:08 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id B8FE5120A26; Mon, 29 Apr 2019 20:04:03 +0900 (JST) Received: from o1678916x28.outbound-mail.sendgrid.net (o1678916x28.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 0C6A7120A09 for ; Mon, 29 Apr 2019 20:04:01 +0900 (JST) Received: by filter0118p3las1.sendgrid.net with SMTP id filter0118p3las1-29441-5CC6DA1B-39 2019-04-29 11:03:55.871494011 +0000 UTC m=+309955.559503211 Received: from herokuapp.com (unknown [54.161.168.50]) by ismtpd0025p1mdw1.sendgrid.net (SG) with ESMTP id 09KHcpgBTqyMddui_0ePbQ for ; Mon, 29 Apr 2019 11:03:55.760 +0000 (UTC) Date: Mon, 29 Apr 2019 11:03:55 +0000 (UTC) From: hai-yen.nguyen@creditshelf.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67959 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15811 X-Redmine-Issue-Author: yennguyenh X-Redmine-Sender: yennguyenh X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?FMHLl+3RYbLeK5ndbix9T4+jJkZ3h45d1qgFiUmNpsXFf+EBobgYVW+7knbCA4?= =?us-ascii?Q?2yuPvBqEV8YZtFqaaQFTzsNUV2fywMZBx0A+WxD?= =?us-ascii?Q?ZPSHnjcLXnA4N3smybZMpKhrwCQv2d+SVvvg4Nm?= =?us-ascii?Q?bn49Un1m7gz46K=2F+iWbtO7P+dsibxgHcvatW33X?= =?us-ascii?Q?0rl7Sj=2FA+7l4kq+PdXfs+LCvccsWPQErVrA=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 92476 Subject: [ruby-core:92476] [Ruby trunk Feature#15811] Propsing new method for comparing equality of 2 (float) numbers relatively X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #15811 has been updated by yennguyenh (yen nguyen). I don't know how to add the new method correctly. Please have a look at those gist and tell me what to do! Thank you :) ---------------------------------------- Feature #15811: Propsing new method for comparing equality of 2 (float) numbers relatively https://bugs.ruby-lang.org/issues/15811#change-77822 * Author: yennguyenh (yen nguyen) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- #Background Equal comparison method between 2 float numbers returns unexpected results sometimes. Therefore, a relative comparison method is needed! #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 The function for that would be called close? close?(a, b, rel_tol, abs_tol) a and b: are the two values to be tested to relative closeness 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: is a minimum absolute tolerance level -- useful for comparisons near zero. #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 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 Relative equal comparison https://gist.github.com/yennguyenh/63d5e7a11f354f796b43ada037c4b2c5 Test cases https://gist.github.com/yennguyenh/2e81dc72b310cb9d886a82faf3d536ef -- https://bugs.ruby-lang.org/