Hatena::Grouprubyist

たばさの RSSフィード

12/06(火) 2016

平方根 その一

平方根 その一 - たばさの を含むブックマーク はてなブックマーク - 平方根 その一 - たばさの

それ何々でできるおっていうのはちょっと黙ってて。

まずとりあえず計算してみよう。


irb(main):001:0> 2**0.5

=> 1.4142135623730951

irb(main):002:0>

ソウジャナイ。。。



require 'optparse'

figure=2
opt = OptionParser.new
opt.on('-n num',"num") {|v| figure=v.to_i}
opt.parse!(ARGV)
exit if figure>9


def nextt n, v
  num=v-1
  t=n*10
  r=0
  if ((t+5)**2).to_s[0,1].to_i==num
    r=5
  end
  st=r
  10.times{|i|
    break if ((t+st+i)**2).to_s[0,1].to_i>num
    r=st+i
  }
  t+r
end

each=1000
a=(figure**0.5).to_i
st=Time.now
keta=0
while 1
  n=nextt(a,figure)
  et=Time.now
  keta+=1
  a=n
  if keta%each==0
    print keta
    tc=format(" %.2f: ",et-st)
    print tc,a," /\n"
    STDERR.print",",tc
  end
end

平方根 その2

平方根 その2 - たばさの を含むブックマーク はてなブックマーク - 平方根 その2 - たばさの

まあbigdecimalっていうのがあるらしいんですよ。sqrtも桁指定でだいたい。

irb(main):002:0> require 'bigdecimal'

=> true

irb(main):005:0> a=BigDecimal::new(2)

=> #<BigDecimal:2b85f10,'0.2E1',9(27)>

irb(main):008:0> puts a.sqrt(10)

0.1414213562373095048333333334E1

=> nil

いじっていると、計算時間になんだか癖がある。

キャッシュ?

1000>0.02sec

1500>2.5

2000>0.09~0.15

3000>19.5

4000>42~56

5000>0.045

6000>187.62

7000>279.43

8000>355.2

9000>534.8

10000>0.16

20000>0.63

40000>2.52

60000>over10hours

というわけでもなく、

得意な桁とそうでもない桁が。9000苦手なら10000出してしまえばいい、というのは結果がわかっているから言えることで。

ソース見ないとわからない。見れば分かるかはまた別の話。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20161206
カレンダー
<< 2016/12 >>
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
archive Error : RSSが取得できませんでした。