MOIN,
WHILE TRYING TO IMPLEMENT BORWEIN'S ALGORITHM TO CALCULATE
?, I CAME ACROSS
THE FOLLOWING BUG:
# PERL -MBIGNUM -WLE 'PRINT 2->BSQRT(11)'
1.4142135624
# PERL -MBIGNUM -WLE 'PRINT 2->BSQRT(11.1)'
1.41421356237
# PERL -MBIGNUM -WLE 'PRINT 2->BSQRT(11.6)'
4.4721359550
# PERL -MBIGNUM=L,GMP -WLE 'PRINT 2->BSQRT(11)'
1.4142135624
# PERL -MBIGNUM=L,GMP -WLE 'PRINT 2->BSQRT(11.1)'
1.0000000000
# PERL -MBIGNUM=L,GMP -WLE 'PRINT 2->BSQRT(11.6)'
1.0000000000
IN SHORT, PASSING NON-INTEGER ARGUMENTS AS A (NUMBER OF
SIGNIFICANT DIGITS
IN RESULT) MAKES BSQRT() (AND THUS ALSO BROOT()) AND
PROBABLY OTHERS QUITE
UNHAPPY.
THIS WAS TRIGGERED BY NAïVE CODE LIKE:
MY $N = 100;
MY $Y = MATH::BIHGFLOAT->NEW(2)->BSQRT($N + $N / 1000
+ 4);
BDIV() SEEMS ONLY AFFECTED IN GMP:
# PERL -MBIGNUM -WLE 'PRINT SCALAR 1->BDIV(3,11)'
0.33333333333
# PERL -MBIGNUM -WLE 'PRINT SCALAR 1->BDIV(3,11.1)'
0.333333333333
# PERL -MBIGNUM -WLE 'PRINT SCALAR 1->BDIV(3,11.6)'
0.333333333333
# PERL -MBIGNUM=L,GMP -WLE 'PRINT SCALAR 1->BDIV(3,11)'
0.33333333333
# PERL -MBIGNUM=L,GMP -WLE 'PRINT SCALAR
1->BDIV(3,11.1)'
0
# PERL -MBIGNUM=L,GMP -WLE 'PRINT SCALAR
1->BDIV(3,11.6)'
0
BUT P IS AFFECTED AS WELL AS A:
# PERL -MBIGNUM=L,GMP -WLE 'PRINT SCALAR
1->BDIV(3,UNDEF,-11)'
0.33333333333
# PERL -MBIGNUM=L,GMP -WLE 'PRINT SCALAR
1->BDIV(3,UNDEF,-11.1)'
0.00000000000
# PERL -MBIGNUM=L,GMP -WLE 'PRINT SCALAR
1->BDIV(3,UNDEF,-11.6)'
0.00000000000
UGH. TRACKED HERE:
HTTP://RT.CPAN.ORG/TICKET/DISPLAY.HTML?ID=29388
ALL THE BEST,
TELS
--
SIGNED ON SUN SEP 16 13:13:28 2007 WITH KEY 0X93B84C15.
GET ONE OF MY PHOTO POSTERS: HTTP://BLOODGATE.COM/POSTERS
PGP KEY ON HTTP://BLOODGATE.COM/TELS.ASC OR PER EMAIL.
"A WITTY SAYING PROVES NOTHING."
-- VOLTAIRE
|