Package: coreutils
Version: 8.13-3.2
Severity: normal
quote from expr(1) info file:
When built with support for the GNU MP library, `expr' uses
arbitrary-precision arithmetic; otherwise, it uses native arithmetic
types and may fail due to arithmetic overflow.
This appears to actually happen:
$ expr 1000000 \* 1000000 \* 1000000
1000000000000000000
$
$ expr 1000000 \* 1000000 \* 1000000 \* 5
5000000000000000000
$
$ expr 1000000 \* 1000000 \* 1000000 \* 9
9000000000000000000
$
$ expr 1000000 \* 1000000 \* 1000000 \* 10
expr: *: Numerical result out of range
Note that 10^19 is close to 2^64 :
$ bc <<< '10^19 ; 2^64'
10000000000000000000
18446744073709551616
Any shell in current use offers basic arithmetic facilities; surely the
only remaining potential benefit of "expr" is extended-range arithmetic.
Why then is it not compiled to do that?
Alternatively, it appears that gcc supports native 128-bit integers, at
least on some targets, including AMD64. Perhaps use could be made of
that feature.
http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html
See here for a related bug:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=608832
Package libgmp10, the above mentioned "GNU MP library", has an
Installed-Size of 492 (kilobytes?).
Package bc, an arbitrary-precision calculator, which appears to be
statically linked against its own MP arithmetic library, has an
Installed-Size of 260.
Surely coreutils can be dynamically linked against some stripped-down
library which will solve this problem? It doesn't seem like implementing
variable precision arithmetic ("+", "-", "*", "/", "%") and relational
("==", "!=", "<", "<=", ">", ">=") operators should take more than a few
tens of kilobytes, maximum.
The version of "expr" in the busybox package suffers from the same
problem. Should a separate bug be filed for that?
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'stable-updates'), (500, 'unstable'),
(500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.0-3-amd64 (SMP w/1 CPU core)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash
Versions of packages coreutils depends on:
ii dpkg 1.16.4.3
ii install-info 4.13a.dfsg.1-6
ii libacl1 2.2.51-8
ii libattr1 1:2.4.46-8
ii libc6 2.13-33
ii libselinux1 2.0.96-1
coreutils recommends no packages.
coreutils suggests no packages.
-- no debconf information
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]