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

Thanks in Advance.
cideAsked:
Who is Participating?
 
alamoCommented:
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
 
cideAuthor Commented:
Edited text of question
0
 
mlevCommented:
I don't think Perl supports arbitrary precision arithmetics, does it?
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
cideAuthor Commented:
I have no idea.
0
 
jbirkCommented:
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
 
cideAuthor Commented:
I think there is probably another way.
0
 
alamoCommented:
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
 
alamoCommented:
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
 
cideAuthor 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
 
ozoCommented:
substr does not return a bigint
(1/54) is not a bigint

0
 
cideAuthor Commented:
What exactly is a bigint then?
0
 
ozoCommented:
use Math::BigInt;
$i = Math::BigInt->new($string);
print ref($i);
0
 
cideAuthor Commented:
How would I include this into my code then?
0
 
alamoCommented:
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
 
alamoCommented:
You can convert a BigInt to a string with:

$str = "$b";
To print without the + then use
print substr($str,1);
0
 
cideAuthor 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
 
alamoCommented:
**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.

All Courses

From novice to tech pro — start learning today.