comp.lang.ada
 help / color / mirror / Atom feed
From: Rolf <rolf.ebert_nospam_@gmx.net>
Subject: evaluation of named numbers
Date: Sun, 17 Oct 2010 08:01:25 -0700 (PDT)
Date: 2010-10-17T08:01:25-07:00	[thread overview]
Message-ID: <2304722c-027d-42f6-a45d-5a7646c35cf6@t8g2000yqk.googlegroups.com> (raw)

I always thought that named numbers are fully evaluated with (almost)
unlimited precision at compile time. I was quite astonished to see

  Ticks : constant := 20 / 1000 * 16_000_000 / 8; -- 40_000 ticks

evaluated to 0 and not to the expected 40.000. It seems that the
compiler uses integer numbers also for intermediate results and 20 /
1000 ends up to be 0 instead of 0.02. Any decent pocket calculator
gets that right.

The workaround is simple once I understood the problem:

   Ticks : constant := 20 * 16_000_000 / 8 / 1000; --  40_000 ticks

Are expressions for named numbers always evaluated left to right? I
think I'll add an item to the review check list to always put
multiplications on the left before any divisions.

   Rolf



             reply	other threads:[~2010-10-17 15:01 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-17 15:01 Rolf [this message]
2010-10-17 15:28 ` evaluation of named numbers Vinzent Hoefler
2010-10-17 16:05 ` Robert A Duff
2010-10-17 18:32   ` Georg Bauhaus
2010-10-17 18:57 ` Nasser M. Abbasi
2010-10-17 22:30 ` anon
2010-10-17 22:32 ` anon
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox