3.14159 26535 89793 23846 26433 83279 50288.....
use Math::BigFloat;
my $x = Math::BigFloat->new(‘3.1415...’);
my $y = Math::BigFloat->new(‘2.718281...’);
my $z = $x * $y;
#
my $pi = Math::BigFloat->new(3.141592...);

#
my $pi = Math::BigFloat->new(‘3.141592...’);
use strict;
use Math::BigFloat;
use Benchmark qw(cmpthese);

cmpthese -1, {
    plain => sub {
        my $x = rand(10);
 ...
daisuke@beefcake ~$ perl foo.pl
              Rate bigfloat     plain
bigfloat    3380/s       --     -100%
plain    23831...
> perl benchmark.pl
              Rate bigfloat   plain
bigfloat    3901/s       --   -100%
plain    2338582/s   59849%   ...
•DateTime::Util::Calc
•DateTime::Util::Astro
•DateTime::Event::Lunar
my $v = ( $x + $y ) * $z;

#include <mpfr.h>

mpfr_t x, y, z, w;
mpfr_add( w, x, y, MPFR_RNDN );
mpfr_mul( w, w, z, MPFR_R...
mpfr_add( w, x, y, MPFR_RNDN );
s/iter bigint     xs
bigint     2.58     --   -98%
mpfr   4.70e-02 5394%      --
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Perlで任意精度計算
Upcoming SlideShare
Loading in...5
×

Perlで任意精度計算

2,039

Published on

YAPC::Asia Tokyo 2010 presentation

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,039
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide





















































  • Perlで任意精度計算

    1. 1. 3.14159 26535 89793 23846 26433 83279 50288.....
    2. 2. use Math::BigFloat; my $x = Math::BigFloat->new(‘3.1415...’); my $y = Math::BigFloat->new(‘2.718281...’); my $z = $x * $y;
    3. 3. # my $pi = Math::BigFloat->new(3.141592...); # my $pi = Math::BigFloat->new(‘3.141592...’);
    4. 4. use strict; use Math::BigFloat; use Benchmark qw(cmpthese); cmpthese -1, {     plain => sub {         my $x = rand(10);         my $y = rand(10);         my $z = rand(10);         ($x + $y ) * $z;     },     bigfloat => sub {         my $x = rand(10);         my $y = rand(10);         my $z = rand(10);         (Math::BigFloat->new($x) + Math::BigFloat->new($y)) * Math::BigFloat->new($z);     }, };
    5. 5. daisuke@beefcake ~$ perl foo.pl               Rate bigfloat plain bigfloat 3380/s -- -100% plain 2383127/s 70403% -- daisuke@beefcake ~$ perl foo.pl               Rate bigfloat plain bigfloat 3380/s -- -100% plain 2360644/s 69738% -- daisuke@beefcake ~$ perl foo.pl               Rate bigfloat plain bigfloat 3380/s -- -100% plain 2406041/s 71081% --
    6. 6. > perl benchmark.pl Rate bigfloat plain bigfloat 3901/s -- -100% plain 2338582/s 59849% --
    7. 7. •DateTime::Util::Calc •DateTime::Util::Astro •DateTime::Event::Lunar
    8. 8. my $v = ( $x + $y ) * $z; #include <mpfr.h> mpfr_t x, y, z, w; mpfr_add( w, x, y, MPFR_RNDN ); mpfr_mul( w, w, z, MPFR_RNDN );
    9. 9. mpfr_add( w, x, y, MPFR_RNDN );
    10. 10. s/iter bigint xs bigint 2.58 -- -98% mpfr 4.70e-02 5394% --
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×