Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 3D22B200C70 for ; Thu, 20 Apr 2017 05:17:08 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 3BAC0160BAD; Thu, 20 Apr 2017 03:17:08 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 83E88160B9C for ; Thu, 20 Apr 2017 05:17:07 +0200 (CEST) Received: (qmail 25148 invoked by uid 500); 20 Apr 2017 03:17:06 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 25137 invoked by uid 99); 20 Apr 2017 03:17:06 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Apr 2017 03:17:06 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 0AD9EC0C69 for ; Thu, 20 Apr 2017 03:17:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -98.702 X-Spam-Level: X-Spam-Status: No, score=-98.702 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_NUMSUBJECT=0.5, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id GRETGfXdRT3P for ; Thu, 20 Apr 2017 03:17:05 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id DC1395FB64 for ; Thu, 20 Apr 2017 03:17:04 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 7B90BE0BDD for ; Thu, 20 Apr 2017 03:17:04 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 388CF21B55 for ; Thu, 20 Apr 2017 03:17:04 +0000 (UTC) Date: Thu, 20 Apr 2017 03:17:04 +0000 (UTC) From: "Bruno P. Kinoshita (JIRA)" To: issues@commons.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (MATH-1414) Method reciprocal() in Complex for complex numbers with parts very close to 0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Thu, 20 Apr 2017 03:17:08 -0000 [ https://issues.apache.org/jira/browse/MATH-1414?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15975981#comment-15975981 ] Bruno P. Kinoshita commented on MATH-1414: ------------------------------------------ Trying to make sure I understand the issue in the code. Using -2.44242319E-315 as input, here's the result in Python with NumPy. {noformat} >>> import numpy as np >>> complex0 = -2.44242319e-315 >>> complex1 = np.reciprocal(complex0) >>> complex1 -inf >>> np.imag(complex0) array(0.0) {noformat} Here's the output with GNU Octave: {noformat} >> complex0 = -2.44242319E-315 complex0 = -2.4424e-315 >> complex1 = 1./complex0 complex1 = -Inf >> imag(complex1) ans = 0 {noformat} And in our case, as [~gjahanagirova] pointed, we get the following with the latest code from git/master: {noformat} Complex complex0 = new Complex((-2.44242319E-315)); Complex complex1 = complex0.reciprocal(); System.out.println(complex1.getReal()); System.out.println(complex1.getImaginary()); # Output will be: # -Infinity # NaN {noformat} For the reciprocal value, for the three libraries the real value is -Infinity. NumPy and Octave seem to agree that the imaginary part of the reciprocal is 0.0. But [math] says it is NaN. >the value of complex1.getImaginary() will be NaN, instead of complex1 being equal to INF. Are we sure the imaginary part of the reciprocal value must be INF, instead of 0.0 as in the other libraries? > Method reciprocal() in Complex for complex numbers with parts very close to 0.0 > ------------------------------------------------------------------------------- > > Key: MATH-1414 > URL: https://issues.apache.org/jira/browse/MATH-1414 > Project: Commons Math > Issue Type: Improvement > Reporter: Gunel Jahangirova > Priority: Minor > > In class Complex method reciprocal() returns INF only if the real and imaginary parts are exactly equal to 0.0. In the cases when real and imaginary parts are double numbers very close to 0.0, it does not hold. For example, if we run this code > {code} > Complex complex0 = new Complex((-2.44242319E-315)); > Complex complex1 = complex0.reciprocal(); > {code} > the value of complex1.getReal() will be -Infinity and the value of complex1.getImaginary() will be NaN, instead of complex1 being equal to INF. > I think the code in the method > {code} > if (real == 0.0 && imaginary == 0.0) { > return INF; > } > {code} > should be replaced by the equality check with some tolerance (0.01 in this case): > {code} > if (equals(this, ZERO, 0.01)) { > return INF; > } > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)