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=-0.9 required=5.0 tests=BAYES_00,FROM_NUMERIC_TLD autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,6fabd104d18f3943 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news1.google.com!news.glorb.com!news2.glorb.com!transit3.readnews.com!news-xxxfer.readnews.com!news-out.readnews.com!postnews3.readnews.com!not-for-mail From: "Stuart" Newsgroups: comp.lang.ada References: <4abc8389$1_1@glkas0286.greenlnk.net> <35adcbc7-dec6-45ae-bf80-1ebb7a058507@l35g2000vba.googlegroups.com> Subject: Re: conversions between fixed-point types Date: Mon, 28 Sep 2009 14:40:32 +0100 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.3598 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3350 Message-ID: <4ac0bcbd$1_1@glkas0286.greenlnk.net> X-Original-NNTP-Posting-Host: glkas0286.greenlnk.net NNTP-Posting-Host: bd538170.gradwell.net X-Trace: DXC=O1`>AOS]45IUaeLX`Lm>6D@lWf8?fSK:AjS@R6]oDiIO "sjw" wrote in message news:35adcbc7-dec6-45ae-bf80-1ebb7a058507@l35g2000vba.googlegroups.com... > On Sep 25, 9:47 am, "Stuart" wrote: > "Adam Beneschan" wrote in message .. > > Dirk Herrmann wrote: DH> FpB'Image(FpB'(-1.5)) evaluates to -1.2 DH> FpB'Image(FpB(FpA'(-1.5))) evaluates to -1.2 DH> FpB'Image(MakeBFromA(FpA'(-1.5))) evaluates to -1.6 AB> The answer is curious (and I'm not sure if it's what the language AB> designers intended). 4.9(38) says, ... AB> ... AB> If FpB'Machine_Rounds is FALSE, though, the situation is interesting. AB> 4.9(38) requires that static expressions get *truncated* toward zero, AB> as I read it. But there's no similar requirement for expressions AB> computed at runtime. S> Having played with this on GNATPro 6.1.2 (to PC target) it does report S> FpB'Machine_Rounds as false. It also rounds values like -1.59999 down to S> -1.2 (which is a logical consequence). Technically this is still within the S> error bounds declared for FpB (delta 0.4) so it is not "wrong" within the S> rules of the language definition. But it is very counter-intuitive and is S> the sort of thing I find frustrating. S> S> I also tested the problem on GreenHills AdaMULTI (4.2.3 to PowerPC target); S> this gave FpB'Machine_Rounds as true and gave the more intuitive results. S> S> -1.5 -> -1.6 S> -1.40001 -> -1.6 S> -1.4 -> -1.2 S> S> So although there does look to be a language "gotcha" here, it depends upon S> the compiler's choice of 'Machine_Rounds. SW> This is all very weird. Can I point you to my earlier post at SW> http://groups.google.com/group/comp.lang.ada/msg/f79a71b9abe7e287 SW> which (unless I'm deluded) shows GNAT rounding away from zero for SW> dynamic values even though 'Machine_Rounds is False!! (and I get the SW> same results on Ubuntu 8.04 with GNAT GPL 2008. Sorry for any confusion Simon, I was stating my results for static values; for computed/dynamic conversions GNAT does round to nearest (so, away from 0 for -1.5). -- Stuart