Mercurial > hg > octave-lojdl > gnulib-hg
changeset 15446:860eb8897eed
* README: Modernize discussion of signed integers.
Assuming overflow wraparound is no longer safe.
Mention ones' complement and signed magnitude.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sun, 24 Jul 2011 01:34:10 -0700 |
parents | 78d76c49295d |
children | 103270df56db |
files | ChangeLog README |
diffstat | 2 files changed, 16 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-07-24 Paul Eggert <eggert@cs.ucla.edu> + + * README: Modernize discussion of signed integers. + Assuming overflow wraparound is no longer safe. + Mention ones' complement and signed magnitude. + 2011-07-22 Bruno Haible <bruno@clisp.org> select tests, pselect tests: Refactor.
--- a/README +++ b/README @@ -242,30 +242,18 @@ require 'int' to be at least 32 bits wide, so Gnulib code assumes this as well. Gnulib code makes the following additional assumptions: - * With one exception noted below, signed integer arithmetic is two's - complement, without runtime overflow checking. This is the - traditional behavior, and is supported by C99 implementations that - conform to ISO/IEC 10967-1 (LIA-1) and that define signed integer - types as being modulo. - - The exception is signed loop indexes. Here, the behavior is - undefined if any signed expression derived from the loop index - overflows. For example, the following code contains two such - overflows (the "i++" and the "i + 1") and therefore has undefined - behavior: + * Signed integer arithmetic is two's complement. - int i; - for (i = INT_MAX - 10; i <= INT_MAX; i++) - if (i + 1 < 0) - { - report_overflow (); - break; - } + Previously, gnulib code sometimes assumed that signed integer + arithmetic wraps around, but modern compiler optimizations + sometimes do not guarantee this, and gnulib code with this + assumption is now considered to be questionable. For more, please + see the file doc/intprops.texi. - This exception is a concession to modern optimizing compilers, - which can turn the above loop into code that executes the loop body - 11 times, even though wraparound arithmetic would cause the loop to - iterate forever. + Some gnulib modules contain explicit support for the other signed + integer representations allowed by C99 (ones' complement and signed + magnitude), but these modules are the exception rather than the rule. + All practical gnulib targets use two's complement. * There are no "holes" in integer values: all the bits of an integer contribute to its value in the usual way.