Solved

# Printing all the numbers.

Posted on 1998-07-19
159 Views
I've got a really large number and it always prints with an exponent.  I want it to print the whole number how do I do this?
e.g.
I input: 255255789012345678901234567890123456789
But if I divide it by one making it a number to PERL I get:  2.55255789012346e+038
I want: 255255789012345678901234567890123456789

0
Question by:cide
• 7
• 6
• 2
• +2

Author Comment

Edited text of question
0

LVL 2

Expert Comment

I don't think Perl supports arbitrary precision arithmetics, does it?
0

Author Comment

I have no idea.
0

LVL 8

Expert Comment

Well....  You could always use an array of numbers, and a series of functions to load into the array, perform arithmetic if needed, and output the array...  I remember implementing a class for such an object in C++ as a class project...  although perl would be a bit more difficult.

-Josh
0

Author Comment

I think there is probably another way.
0

LVL 6

Expert Comment

What operations do you need to perform on the number? If nothing but storing and printing, you could keep it as a string. If the only other operation you need is comparison (for sorting, for example) then that would be easy to implement as strign compares. Full math is harder. Perl keeps a finite number of digits of precision, and you've passed that number.

0

LVL 6

Expert Comment

Actually, it looks like Math::BigInt can handle arbitrary-sized numbers. It's a standard package you should already have. That's your solution.
0

LVL 6

Accepted Solution

alamo earned 0 total points
Yes, Math:BigInt does the trick:

use Math::BigInt;

\$i = new Math::BigInt "255255789012345678901234567890123456789";
\$j = new Math::BigInt "2";
\$k = \$i*\$j;
print \$k;

prints
+510511578024691357802469135780246913578

0

Author Comment

It's having problems with NaN.  Not sure why.
\$b = "104050051052053054055056057048049050051052053054055056057048049050051052053054055056057048049050051052053054055056057048";
use Math::BigInt;
\$b = new Math::BigInt \$b;
\$b = substr(\$b,1,length(\$b)-1);
\$c = \$b**(1/54);
\$d = new Math::BigInt int(\$c**54);
Any Idea why?
0

LVL 84

Expert Comment

substr does not return a bigint
(1/54) is not a bigint

0

Author Comment

What exactly is a bigint then?
0

LVL 84

Expert Comment

use Math::BigInt;
\$i = Math::BigInt->new(\$string);
print ref(\$i);
0

Author Comment

How would I include this into my code then?
0

LVL 6

Expert Comment

In order to do math with BigInts all operands need to be BigInts, as my original example showed.

To raise your \$b to the 54th power, you need to first make a BigInt which contains the number 54:

\$c54 = new Math::BigInt "54";
\$d = \$b**\$c54;

But remember that BigInt is an integer - so 1/54 won't work. You can try BigFloat, but that doesn't seem to support **.
0

LVL 6

Expert Comment

You can convert a BigInt to a string with:

\$str = "\$b";
To print without the + then use
print substr(\$str,1);
0

Author Comment

Well is there anyway to convert the number to bigint because it will do the 1/54 fine it's just when I try to **54 after that it gives me trouble.
0

LVL 6

Expert Comment

**54 works for me... but 1/54 doesn't, because a BigInt with the value 1/54 turns out to be 0. (It's the same as saying int(1/54).

You might be able to rearrange the operations so that integers work... I am not enough of a mathematician to know precisely how, though.
0

## Featured Post

### Suggested Solutions

A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…