2011-05-10 12 views

Odpowiedz

21

Edited następujący komentarz

number_total = (records/per_page.to_f).ceil 
+0

Sufit lub okrągły? który jest właściwy? thxs – AnApprentice

+1

Czego chcesz od "1.1"? To zależy. '1' lub' 2'? – sawa

+0

Dla 1.1 Chcę 2 – AnApprentice

0

Nadchodzi korzeniem wszelkiego zła: przedwcześnie zoptymalizowany sposób:

class Integer 
    # returns quotient's ceiling integer 
    def div_ceil(divisor) 
    q = self/divisor 
    if self % divisor > 0 
     return q + 1 
    else 
     return q 
    end 
    end 
end 

Poniższy kod odniesienia:

require 'benchmark' 

$a = 1050 
$b = 100 

def float_op 
    ($a/$b.to_f).ceil 
end 

def integer_op 
    q = $a/$b 
    if $a % $b > 0 
    return q + 1 
    else 
    return q 
    end 
end 

n = 1000000 
Benchmark.bm do |x| 
    x.report { n.times do; float_op; end } 
    x.report { n.times do; integer_op; end } 
end 

daje mi ten wynik:

 user  system  total  real 
    0.160000 0.000000 0.160000 ( 0.157589) 
    0.130000 0.000000 0.130000 ( 0.133821) 
1

@lulala Kolejny korzeń wszelkiego zła: wyniki zbierania wiśni.

Przeprowadź test porównawczy wiele razy. Otrzymuję:

 user  system  total  real 
    0.120000 0.000000 0.120000 ( 0.119281) 
    0.120000 0.000000 0.120000 ( 0.123431) 

Co to jest remis.

 user  system  total  real 
    0.110000 0.000000 0.110000 ( 0.118602) 
    0.130000 0.000000 0.130000 ( 0.127195) 

Co sugeruje, że float_op jest szybszy.

 user  system  total  real 
    0.150000 0.000000 0.150000 ( 0.151104) 
    0.120000 0.000000 0.120000 ( 0.123836) 

Co sugeruje, że integer_op nas szybciej.

Powiązane problemy