Operating System - HP-UX
1752806 Members
5589 Online
108789 Solutions
New Discussion юеВ

Re: arithmetic operations problem

 
SOLVED
Go to solution
Paul_481
Respected Contributor

arithmetic operations problem

Hi,

This is using POSIX shell.

I.

#((x=1000000000+1));echo $x
1000000001

II.

#((x=10000000000+1));echo $x
1410065409

I notice that POSIX is not capable of computing more that 10 digit. Is there a way around this? Any other alternative?

Regards,
Paul
10 REPLIES 10
Eric Antunes
Honored Contributor

Re: arithmetic operations problem

Hi Paul,

Try this:

((x=500000000+1));((y=500000000));echo $x;echo $y;((z=$y+$x));echo $z

Best Regards,

Eric Antunes
Each and every day is a good day to learn.
Paul_481
Respected Contributor

Re: arithmetic operations problem

Hi Eric,

((x=500000000+1));((y=500000000));echo $x;echo $y;((z=$y+$x));echo $z

From you example the value of x is still less than 10.

What I need is for a way to compute 11 digit integer.

Regards,
Paul
CAS_2
Valued Contributor
Solution

Re: arithmetic operations problem

Arithmetic operations are 32 bit wide.

integers range are: from -2^31 (-2147483648) to +2^31-1 (+2147483647)

Following commands show only low 32-bit are used:

(( x=2147483647)); (( x=x+1 )); echo $x
-2147483648

I should use "bc" command (or "dc" utility) instead.
erics_1
Honored Contributor

Re: arithmetic operations problem

Paul,

Take a look at Knowledge Base Doc. ID 4000099480 . This explains workarounds to 32 bit integer limitations.

Regards,
Eric
CAS_2
Valued Contributor

Re: arithmetic operations problem

Using bc command:

echo 10000000000+1 | bc | read x
echo $x

Note that the 32-bit arithmetic is also applicable to INTEGER shell variables defined by means of 'typeset -i' (or 'integer' alias). Therefore, the shell variables used to handle this big values HAVE TO BE NON-INTEGER.

The following examples:

typeset -i x
echo 10000000000+1 | bc | read x
echo $x

typeset +i x
echo 10000000000+1 | bc | read x
echo $x


wil print:

1410065409
10000000001

Eric Antunes
Honored Contributor

Re: arithmetic operations problem

Sorry Paul, I missed one zero...

I also have this 32 bits maximum:

2^0+2^1+...+2^31=2^32-2^0=4294967296-1=4294967295 but since we also need to use negative numbers, our limit is as CAS said...

Best Regards,

Eric Antunes
Each and every day is a good day to learn.
Paul_481
Respected Contributor

Re: arithmetic operations problem

Hi all,

I have problem storing the output of bc into variable. I need to get to correct results and process it further.

cscpcc@idmp005 [/home/cscpcc]
#print "2124582832+256000000"|bc
2380582832

cscpcc@idmp005 [/home/cscpcc]
#print "2124582832+256000000"|bc|read x|echo $x
-1914384464


Regards,
Paul
Stephen Keane
Honored Contributor

Re: arithmetic operations problem

You probably meant

# print "2124582832+256000000"|bc|read x;echo $x

(i.e. lose the last pipe)

Works for me!




Stephen Keane
Honored Contributor

Re: arithmetic operations problem

(well apart from the 32-bit integer rounding bit!)