9

I'm trying to use the bignum module in Perl and want to set the precision. I know this can be done via a one liner as detailed on the module's CPAN page:

$ perl -Mbignum=p,-50 -le 'print sqrt(20)'

...which will print out the square root of 20 to 50 digits of precision, but what I'm wondering is if there's anyway to set the precision within a script, i.e. something like:

#!/usr/bin/perl
use bignum;

setPrecision(-50);
print sqrt(20);

I've searched around here, Google, and PerlMonks without any luck so far. Thanks in advance.

brian d foy
  • 129,424
  • 31
  • 207
  • 592
theraccoonbear
  • 4,283
  • 3
  • 33
  • 41

1 Answers1

12

Per Anon.'s suggestion:

#!/usr/bin/perl

use strict;
use warnings;

use bignum ( p => -50 );

print sqrt(20);

You might like to look at the docs for Math::BigFloat and Math::BigInt which bignum makes use of.

Brad Gilbert
  • 33,846
  • 11
  • 78
  • 129
martin clayton
  • 76,436
  • 32
  • 213
  • 198
  • 1
    That does not work for me, Perl is wrong here: `perl -e 'use bignum(p=>-100);printf("%1.50f\n",sqrt(23));'` outputs `4.79583152331271911350540904095396399497985839843750` This is right: `perl -Mbignum=p,-50 -le 'print sqrt(23)'` `4.79583152331271954159743806416269391999670704190413` compared with the correct calculation from bc: `echo "scale=50;sqrt(23)"|bc` `4.79583152331271954159743806416269391999670704190412` – Axel Heider Oct 24 '13 at 10:03