From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,270d47706116d3c X-Google-Attributes: gid103376,public From: mab@dst17.wdl.loral.com (Mark A Biggar) Subject: Re: Can compilers do this? Date: 1996/02/23 Message-ID: <4gl344$q4j@wdl1.wdl.loral.com>#1/1 X-Deja-AN: 140842931 references: <4gjd6g$mfq@newsbf02.news.aol.com> organization: Loral Western Development Labs newsgroups: comp.lang.ada Date: 1996-02-23T00:00:00+00:00 List-Id: In article <4gjd6g$mfq@newsbf02.news.aol.com> bwburnsed@aol.com (BWBurnsed) writes: >I came across some very strange looking code that someone else wrote, >long, long ago, and (apparently) in a universe far, far away. But before I >make too many critical comments, I want to be sure I'm not missing >something. >Repeatedly in this code (in many files), there are places where a floating >point variable is tested to see if it is negative. However, the way it is >done is: > if X * abs(X) < 0.0 then ... >Is there (or was there ever) some pathological anomaly about floating >point >implementations that would make a conversion (abs) and floating point >multiply >preferable to testing a sign bit? Can, and will, optimizing compilers >recognize the >real test desired in such constructs, i.e. reduce it to a sign bit test? My guess is that on that machine signed zeros exist and that -0.0 < 0.0 and that -0.0 * 0.0 => 0.0, thus the above gives the right answer when given a -0.0. >Also, suppose Y and X are floating point variables, and M and B are >CONSTANT floating point variables (not named numbers) initialized to >1.0 and 0.0 respectively. If one writes > Y := M * X + B ; >can (and will) any compiler reduce this to > Y := X ; >If not, could it do so if M and B were named numbers? Yes, a lot of compiler peephole optimizers recognize "add immediate 0" and "mul immediate 1" instructions as things that can be optimized away. Other compiler do this as part of the constant folding algorithm (in Ada terms "static expression evaluator") and never even generate the code. In most cases, it should not matter if the constants are universal or not. -- Mark Biggar mab@wdl.loral.com