From: Paavo Helde <myfirstname@osa.pri.ee>
Subject: Re: Why use C++?
Date: Fri, 12 Aug 2011 01:51:34 -0500
Date: 2011-08-12T01:51:34-05:00 [thread overview]
Message-ID: <Xns9F3F644C1177Fmyfirstnameosapriee@216.196.109.131> (raw)
In-Reply-To: j22ddq$7pq$1@dont-email.me
"Jed" <jehdiah@orbitway.net> wrote in news:j22ddq$7pq$1@dont-email.me:
>
> "Randy Brukardt" <randy@rrsoftware.com> wrote in message
> news:j22c61$5lo$1@munin.nbi.dk...
>
>> Modular types are something altogether different (and in all honesty,
>> rare enough that direct language support is of dubious value -- most
of
>> us supported adding them to Ada 95 simply because it was the only way
>> to get any support for the largest unsigned integer type).
>>
>
> Isn't the wrapping behavior just a consequence of wanting to get a
> representation in which signed and unsigned integers can be easily
> converted to each other? I.e., "they" didn't sit down and say, "let's
> implement unsigned integers with wrapping behavior".
Indeed, the 2's complement representation allows to use the same hardware
instruction for implementing the signed and unsigned addition (ditto for
subtraction). However, this means that the hardware will raise the
overflow flag exactly in the same fashion, so it would be equally easy to
detect the overflow.
I guess that they were instead thinking about intermediate results. As
the wrap-around point (zero) is very close to the common usage range of
unsigned integers, it may well happen that in a complex arithmetic
expression a temporary intermediate result may fall below zero whereas
the final result will be OK again. This would in effect mean that the
addition-subtraction operations would lose the associativity property,
which would cause some headaches. E.g. the programmer should always use
parens for indicating the relative order of addition and subtraction,
e.g. a+(b-c) and take care that no intermediate result would overflow. As
the common C/C++ implementations do not bother to check overflow even for
the signed types, this would just mean that there would be a lot more of
formally undefined behavior which seems to work as expected on a lot of
hardware. So, instead of introducing a lot of UB they chose to make
things like a+b-c legal by a simple trick of declaring the unsigned types
wrap-around.
Yes, Ada could have been wiser, I'm sorry to hear this is not the case.
Cheers
Paavo
next prev parent reply other threads:[~2011-08-12 6:51 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <fb9f787c-af06-427a-82b6-b0684e8dcbc5@s2g2000vby.googlegroups.com>
[not found] ` <j1kaj8$dge$1@adenine.netfront.net>
[not found] ` <1e292299-2cbe-4443-86f3-b19b8af50fff@c29g2000yqd.googlegroups.com>
[not found] ` <j1tha5$11q5$1@adenine.netfront.net>
[not found] ` <1fd0cc9b-859d-428e-b68a-11e34de84225@gz10g2000vbb.googlegroups.com>
2011-08-10 19:05 ` Why use C++? Niklas Holsti
2011-08-10 22:37 ` Randy Brukardt
2011-08-10 22:49 ` Ludovic Brenta
2011-08-12 4:54 ` Randy Brukardt
2011-08-11 7:54 ` Dmitry A. Kazakov
2011-08-11 8:20 ` Jed
2011-08-11 9:13 ` Dmitry A. Kazakov
2011-08-11 10:57 ` Jed
2011-08-11 11:43 ` Georg Bauhaus
2011-08-12 5:07 ` Jed
2011-08-11 13:11 ` Nomen Nescio
2011-08-11 15:11 ` Paul
2011-08-12 5:15 ` Jed
2011-08-12 21:39 ` Fritz Wuehler
2011-08-14 6:52 ` Jed
2011-08-14 8:13 ` Nomen Nescio
2011-08-11 15:09 ` Dmitry A. Kazakov
2011-08-12 5:03 ` Jed
2011-08-12 8:32 ` Georg Bauhaus
2011-08-12 13:15 ` Hyman Rosen
2011-08-12 22:09 ` Randy Brukardt
2011-08-12 15:14 ` Jed
2011-08-12 17:20 ` Georg Bauhaus
2011-08-12 19:51 ` Jed
2011-08-12 21:22 ` Ludovic Brenta
2011-08-14 7:00 ` Jed
2011-08-16 13:06 ` Ludovic Brenta
2011-08-13 9:37 ` Georg Bauhaus
2011-08-14 5:22 ` Jed
2011-08-13 10:27 ` Georg Bauhaus
2011-08-14 5:35 ` Jed
2011-08-14 20:13 ` Georg Bauhaus
2011-08-15 11:38 ` Georg Bauhaus
2011-08-13 11:02 ` Georg Bauhaus
2011-08-14 5:56 ` Jed
2011-08-12 9:21 ` Dmitry A. Kazakov
2011-08-12 13:26 ` Jed
2011-08-12 14:30 ` Dmitry A. Kazakov
2011-08-12 19:06 ` Jed
2011-08-12 20:05 ` Dmitry A. Kazakov
2011-08-13 7:53 ` Jed
2011-08-13 9:15 ` Dmitry A. Kazakov
2011-08-13 9:29 ` Ian Collins
2011-08-13 9:52 ` Dmitry A. Kazakov
2011-08-13 11:10 ` Ian Collins
2011-08-13 11:46 ` Georg Bauhaus
2011-08-13 20:30 ` Ian Collins
2011-08-13 11:54 ` Brian Drummond
2011-08-13 13:12 ` Simon Wright
2011-08-14 11:01 ` Brian Drummond
2011-08-14 4:54 ` Jed
2011-08-14 4:35 ` Jed
2011-08-14 6:46 ` Dmitry A. Kazakov
2011-08-14 4:49 ` Jed
2011-08-14 6:51 ` Dmitry A. Kazakov
2011-08-14 4:29 ` Jed
2011-08-14 7:29 ` Dmitry A. Kazakov
2011-08-16 8:18 ` Nick Keighley
2011-08-16 8:47 ` Dmitry A. Kazakov
2011-08-16 9:52 ` Nick Keighley
2011-08-16 10:39 ` Dmitry A. Kazakov
2011-08-16 10:23 ` Georg Bauhaus
2011-08-16 10:58 ` Dmitry A. Kazakov
2011-08-16 11:44 ` Georg Bauhaus
2011-08-16 14:51 ` Bill Findlay
2011-08-16 19:13 ` Dmitry A. Kazakov
2011-08-16 19:23 ` Bill Findlay
2011-08-12 11:48 ` Stuart Redmann
2011-08-12 13:12 ` Vinzent Hoefler
2011-08-12 15:50 ` Stuart Redmann
2011-08-12 17:02 ` Bill Findlay
2011-08-15 12:59 ` Vinzent Hoefler
2011-08-12 5:02 ` Randy Brukardt
2011-08-12 5:16 ` Robert Wessel
2011-08-12 16:39 ` Adam Beneschan
2011-08-12 5:24 ` Jed
2011-08-12 6:51 ` Paavo Helde [this message]
2011-08-12 7:41 ` Georg Bauhaus
2011-08-12 15:50 ` Fritz Wuehler
2011-08-12 19:59 ` Jed
2011-08-13 8:06 ` Stephen Leake
2011-08-12 9:40 ` Dmitry A. Kazakov
2011-08-12 9:45 ` Ludovic Brenta
2011-08-12 10:48 ` Georg Bauhaus
2011-08-12 15:56 ` Ludovic Brenta
2011-08-13 8:08 ` Stephen Leake
2011-08-18 13:39 ` Louisa
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox