Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
This paste will be private.
## benchmark require 'benchmark' total = (ENV['TOTAL'] || 1_000).to_i fixnums = Array.new(total).fill { |a| rand(100_000).to_i } bignums = Array.new(total).fill { |a| 0xffff_ffff_ffff_ffff + rand(100_000).to_i } floats = Array.new(total).fill { |a| rand(100_000).to_f } Benchmark.bmbm do |x| x.report("loop") do times = 0 while times < total i, j = 0, total-1 while i < total i += 1 j -= 1 end times += 1 end end x.report("Bignum + Bignum") do times = 0 while times < total i, j = 0, total-1 while i < total bignums[i] + bignums[j] i += 1 j -= 1 end times += 1 end end x.report("Bignum + Fixnum") do times = 0 while times < total i, j = 0, total-1 while i < total bignums[i] + fixnums[j] i += 1 j -= 1 end times += 1 end end x.report("Bignum + Float") do times = 0 while times < total i, j = 0, total-1 while i < total bignums[i] + floats[j] i += 1 j -= 1 end times += 1 end end x.report("Fixnum + Fixnum") do times = 0 while times < total i, j = 0, total-1 while i < total fixnums[i] + fixnums[j] i += 1 j -= 1 end times += 1 end end x.report("Fixnum + Bignum") do times = 0 while times < total i, j = 0, total-1 while i < total fixnums[i] + bignums[j] i += 1 j -= 1 end times += 1 end end x.report("Fixnum + Float") do times = 0 while times < total i, j = 0, total-1 while i < total fixnums[i] + floats[j] i += 1 j -= 1 end times += 1 end end x.report("Float + Float") do times = 0 while times < total i, j = 0, total-1 while i < total floats[i] + floats[j] i += 1 j -= 1 end times += 1 end end x.report("Float + Bignum") do times = 0 while times < total i, j = 0, total-1 while i < total floats[i] + bignums[j] i += 1 j -= 1 end times += 1 end end x.report("Float + Fixnum") do times = 0 while times < total i, j = 0, total-1 while i < total floats[i] + fixnums[j] i += 1 j -= 1 end times += 1 end end end ## MRI euler:rubinius brian$ TOTAL=1_000 ruby math.rb Rehearsal --------------------------------------------------- loop 0.520000 0.000000 0.520000 ( 0.526538) Bignum + Bignum 1.230000 0.010000 1.240000 ( 1.241606) Bignum + Fixnum 1.470000 0.000000 1.470000 ( 1.480382) Bignum + Float 1.000000 0.010000 1.010000 ( 1.023455) Fixnum + Fixnum 0.940000 0.000000 0.940000 ( 0.956190) Fixnum + Bignum 1.960000 0.010000 1.970000 ( 1.976145) Fixnum + Float 0.980000 0.010000 0.990000 ( 0.986041) Float + Float 0.970000 0.000000 0.970000 ( 0.983038) Float + Bignum 1.000000 0.010000 1.010000 ( 1.028215) Float + Fixnum 0.990000 0.000000 0.990000 ( 0.992212) ----------------------------------------- total: 11.110000sec user system total real loop 0.510000 0.010000 0.520000 ( 0.513927) Bignum + Bignum 1.230000 0.000000 1.230000 ( 1.229817) Bignum + Fixnum 1.460000 0.010000 1.470000 ( 1.477439) Bignum + Float 1.000000 0.000000 1.000000 ( 1.007784) Fixnum + Fixnum 0.930000 0.010000 0.940000 ( 0.956147) Fixnum + Bignum 1.950000 0.000000 1.950000 ( 1.977649) Fixnum + Float 0.970000 0.000000 0.970000 ( 0.972687) Float + Float 0.980000 0.010000 0.990000 ( 0.989669) Float + Bignum 1.000000 0.000000 1.000000 ( 1.027935) Float + Fixnum 0.980000 0.000000 0.980000 ( 0.980609) ## rbx before euler:rubinius brian$ TOTAL=1_000 shotgun/rubinius math.rb Rehearsal --------------------------------------------------- loop 0.082213 0.000000 0.082213 ( 0.082195) Bignum + Bignum 0.786170 0.000000 0.786170 ( 0.786153) Bignum + Fixnum 3.507383 0.000000 3.507383 ( 3.507342) Bignum + Float 6.047656 0.000000 6.047656 ( 6.047641) Fixnum + Fixnum 0.230899 0.000000 0.230899 ( 0.230879) Fixnum + Bignum 3.563296 0.000000 3.563296 ( 3.563289) Fixnum + Float 5.941993 0.000000 5.941993 ( 5.941975) Float + Float 0.789120 0.000000 0.789120 ( 0.789106) Float + Bignum 6.132281 0.000000 6.132281 ( 6.132263) Float + Fixnum 6.172868 0.000000 6.172868 ( 6.172852) ----------------------------------------- total: 33.253879sec user system total real loop 0.087209 0.000000 0.087209 ( 0.087188) Bignum + Bignum 0.753885 0.000000 0.753885 ( 0.753881) Bignum + Fixnum 3.501982 0.000000 3.501982 ( 3.501985) Bignum + Float 6.108905 0.000000 6.108905 ( 6.108903) Fixnum + Fixnum 0.210097 0.000000 0.210097 ( 0.210081) Fixnum + Bignum 3.508541 0.000000 3.508541 ( 3.508554) Fixnum + Float 5.920287 0.000000 5.920287 ( 5.920289) Float + Float 0.835571 0.000000 0.835571 ( 0.835566) Float + Bignum 6.205112 0.000000 6.205112 ( 6.205113) Float + Fixnum 6.216693 0.000000 6.216693 ( 6.216691) ## rbx after rework of Float only euler:rubinius brian$ TOTAL=1_000 shotgun/rubinius math.rb Rehearsal --------------------------------------------------- loop 0.084886 0.000000 0.084886 ( 0.084848) Bignum + Bignum 0.755755 0.000000 0.755755 ( 0.755733) Bignum + Fixnum 3.316833 0.000000 3.316833 ( 3.316814) Bignum + Float 4.260303 0.000000 4.260303 ( 4.260280) Fixnum + Fixnum 0.214757 0.000000 0.214757 ( 0.214762) Fixnum + Bignum 3.433364 0.000000 3.433364 ( 3.433348) Fixnum + Float 4.199053 0.000000 4.199053 ( 4.199036) Float + Float 0.310652 0.000000 0.310652 ( 0.310634) Float + Bignum 0.409653 0.000000 0.409653 ( 0.409644) Float + Fixnum 0.385315 0.000000 0.385315 ( 0.385296) ----------------------------------------- total: 17.370571sec user system total real loop 0.082152 0.000000 0.082152 ( 0.082125) Bignum + Bignum 0.719112 0.000000 0.719112 ( 0.719104) Bignum + Fixnum 3.280030 0.000000 3.280030 ( 3.280026) Bignum + Float 4.317936 0.000000 4.317936 ( 4.317934) Fixnum + Fixnum 0.211694 0.000000 0.211694 ( 0.211678) Fixnum + Bignum 3.371581 0.000000 3.371581 ( 3.371591) Fixnum + Float 4.097401 0.000000 4.097401 ( 4.097396) Float + Float 0.315193 0.000000 0.315193 ( 0.315200) Float + Bignum 0.418549 0.000000 0.418549 ( 0.418555) Float + Fixnum 0.380301 0.000000 0.380301 ( 0.380296) ## after more rework of Bignum, Fixnum 70-6-253-92:rubinius brian$ TOTAL=1_000 shotgun/rubinius math.rb Rehearsal --------------------------------------------------- loop 0.083874 0.000000 0.083874 ( 0.083841) Bignum + Bignum 0.773796 0.000000 0.773796 ( 0.773774) Bignum + Fixnum 1.395339 0.000000 1.395339 ( 1.395324) Bignum + Float 0.353866 0.000000 0.353866 ( 0.353851) Fixnum + Fixnum 0.232125 0.000000 0.232125 ( 0.232106) Fixnum + Bignum 1.416564 0.000000 1.416564 ( 1.416522) Fixnum + Float 0.378118 0.000000 0.378118 ( 0.378100) Float + Float 0.304509 0.000000 0.304509 ( 0.304491) Float + Bignum 0.399603 0.000000 0.399603 ( 0.399588) Float + Fixnum 0.364755 0.000000 0.364755 ( 0.364735) ------------------------------------------ total: 5.702549sec user system total real loop 0.082133 0.000000 0.082133 ( 0.082132) Bignum + Bignum 0.727976 0.000000 0.727976 ( 0.727964) Bignum + Fixnum 1.380439 0.000000 1.380439 ( 1.380427) Bignum + Float 0.339638 0.000000 0.339638 ( 0.339641) Fixnum + Fixnum 0.217382 0.000000 0.217382 ( 0.217379) Fixnum + Bignum 1.412270 0.000000 1.412270 ( 1.412246) Fixnum + Float 0.367439 0.000000 0.367439 ( 0.367441) Float + Float 0.307626 0.000000 0.307626 ( 0.307638) Float + Bignum 0.398086 0.000000 0.398086 ( 0.398091) Float + Fixnum 0.367171 0.000000 0.367171 ( 0.367164)
From the Design Piracy series on my blog: