2011-05-10 11 views

Respuesta

21

Editado tras un comentario

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

ceil or round? ¿Cuál es el correcto? thxs – AnApprentice

+1

¿Qué quieres para '1.1'? Depende de eso. '1' o' 2'? – sawa

+0

Para 1.1 Quiero 2 – AnApprentice

0

Aquí viene la raíz de todos los males: un método prematuramente optimizada:

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 

El siguiente código de referencia:

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 

me da este resultado

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

@lulala Otra raíz de todos los males: los resultados de la recolección de cerezas.

Ejecute su punto de referencia varias veces. consigo el siguiente:

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

¿Qué es un empate.

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

Lo que sugiere que float_op es más rápido.

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

Lo que sugiere que integer_op us más rápido.

Cuestiones relacionadas