2011-05-10 38 views

Trả lời

21

Edited sau một bình luận

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

ceil hoặc tròn? whcih là một trong những quyền? thxs – AnApprentice

+1

Bạn muốn gì cho '1.1'? Nó phụ thuộc vào điều đó. '1' hoặc' 2'? – sawa

+0

Đối với 1,1 Tôi muốn 2 – AnApprentice

0

Ở đây có rễ của mọi tội lỗi: một phương pháp sớm tối ưu hóa:

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 

Mã chuẩn sau:

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 

Cung cấp cho tôi kết quả này

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

@lulala Một gốc rễ khác của tất cả điều ác: kết quả hái dâu.

Chạy điểm chuẩn của bạn nhiều lần. Tôi nhận được các thông tin sau:

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

Đó là sự ràng buộc.

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

Điều này cho thấy rằng float_op nhanh hơn.

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

Điều này gợi ý rằng integer_op chúng tôi nhanh hơn.

Các vấn đề liên quan