http://qs1969.pair.com?node_id=134424


in reply to Help w/ Code Optimization

Can't get your code to work. It dies with message:
Operation `**': no method found, left argument in overloaded package Math::BigFloat, right argument has no overloaded magic at test.pl line 17.

Update:

BTW It seems that using Math::BigFloat methods directly is slighly faster then relying on overloaded operations:

use Benchmark; use Math::BigFloat; timethese(1000, { Methods => sub { Math::BigFloat->new(100)->fmul(Math::BigFloat->ne +w(100)) }, Operations => sub { Math::BigFloat->new(100) * Math::BigFloat->new +(100) }, }); bash-2.05a$ perl test.pl Benchmark: timing 1000 iterations of Methods, Operations... Methods: 2 wallclock secs ( 1.48 usr + 0.01 sys = 1.49 CPU) @ 67 +1.14/s (n=1000) Operations: 1 wallclock secs ( 1.63 usr + 0.00 sys = 1.63 CPU) @ 61 +3.50/s (n=1000)

--
Ilya Martynov (http://martynov.org/)

Replies are listed 'Best First'.
Re: Re: Help w/ Code Optimization
by sifukurt (Hermit) on Dec 26, 2001 at 21:46 UTC
    Sorry, I guess I should have specified what version of Math::BigInt you need. You need to have at least v1.47. I believe that was the first version that had "**" overloaded. Thanks for the suggestion on using the methods directly. I'll try that.
    ___________________
    Kurt
      Moreover using subroutine calls should be even more faster. That is use Math::BigFloat::OP($num) instead of $num->OP.

      --
      Ilya Martynov (http://martynov.org/)