Web lists-archives.com

Re: Recomended tutoial(s) on doing arithmetic in Bash scripts




-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Mon, Mar 06, 2017 at 08:38:05AM -0500, Greg Wooledge wrote:
> On Sun, Mar 05, 2017 at 05:25:49PM +0100, tomas@xxxxxxxxxx wrote:
> > If you need floating point numbers, bc (or dc) are your next stops.
> 
> Or awk.  For some problems, awk is fantastic.
> 
> 
> On Sun, Mar 05, 2017 at 06:14:00PM +0000, GiaThnYgeia wrote:
> > I see your 2 and raise you
> > nosuchagency@bottomofthesea:~$ echo $(((3000000000+4000000000)/3))
> > 2333333333
> > 
> > Infinitely inaccurate digital systems
> 
> Bash uses 64-bit integers, since version 2.05b.  If you want arbitrary
> precision, use bc (or a programming language with an arbitrary precision
> math library).

As I found out, dc also supports arbitrary precision. Had I read the
man page's "NAME" entry

  NAME
       dc - an arbitrary precision calculator

with some more care, oh, well.

> POSIX shells in general may use smaller integers than that.  I wouldn't
> expect anything outside the range (-2^31 .. +2^31) to be portable.

Yes. Proceed with care.

> expr(1) is legacy rubbish and should never be used in new scripts.

It's from the times shells hadn't built-in arithmetic. If you are stuck
with, e.g. an old c shell (some over-expensive commercial application
at $COMPANY is), you might find calls to it deeply buried in shell
primordial soup. So it makes sense to keep it around. But yes, what
expr can do can/should be done (better) by $((...))

regards
- -- t
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iEYEARECAAYFAli9aX8ACgkQBcgs9XrR2kZ0kwCfRml26cNAb7uvl31UkB/gz+Ch
MMIAnjdfsjuUgpQ/JoP3Slha3I/OsQXQ
=czPp
-----END PGP SIGNATURE-----