Path: csiph.com!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Mike Amling Newsgroups: comp.lang.java.programmer Subject: Re: double == double Date: Wed, 19 Oct 2016 08:03:17 -0500 Organization: A noiseless patient Spider Lines: 28 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 19 Oct 2016 13:03:27 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="f10466be8476468a33f57329418437e3"; logging-data="11227"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/ZPw+dddgsTlU0vAvXAjuL" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 In-Reply-To: Cancel-Lock: sha1:5zEUcKxXV4AecuGsQlNntT/1/1I= Xref: csiph.com comp.lang.java.programmer:35818 On 10/12/16 7:15 AM, Stefan Ram wrote: > Sometimes it is taught that it makes no sense to compare > two double values with »==«. > > But what about this function? > > public static double max( final double a, final double b) > { return > a == 0.0 && b == 0.0 && java.lang.Double.doubleToRawLongBits( a ) > == Double.doubleToRawLongBits( -0.0d )? b : a >= b ? a : b; } > > which tries to return positive zero if one argument is > positive zero and the other one negative zero? > > It seems that there are special cases when a comparison > of double values with »==« is appropriate. I have observed > that this is usually the case when comparing with »0.0« - > another example would be avoiding to divide by 0.0. If a==0.0 and b==0.0, there's no need to test whether either is -0.0. The function could be simplified to public static double max(final double a, final double b) { return a==0.0 && b==0.0 ? 0.0 : (a>=b ? a : b); } --Mike Amling V2h5IHVzZSBvbmUgJ2phdmEubGFuZy5Eb3VibGUnIGFuZCBvbmUgJ0RvdWJsZSc/