# Printing all the numbers.

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

###### Who is Participating?

Commented:
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 Commented:
Edited text of question
0

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

Author Commented:
I have no idea.
0

Commented:
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 Commented:
I think there is probably another way.
0

Commented:
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

Commented:
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

Author Commented:
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

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

0

Author Commented:
What exactly is a bigint then?
0

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

Author Commented:
How would I include this into my code then?
0

Commented:
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

Commented:
You can convert a BigInt to a string with:

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

Author Commented:
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

Commented:
**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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.