bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: seq, why so slow?


From: Pádraig Brady
Subject: Re: seq, why so slow?
Date: Mon, 7 Sep 2009 09:30:32 +0100
User-agent: Thunderbird 2.0.0.6 (X11/20071008)

Philip Rowlands wrote:
> The conversion of everything to long doubles internally makes seq a lot
> slower than it needs to be in integer cases, I assume from the use of
> floating-point multiplication for every line of output:
> 
> seq.c:257          x = first + i * step;
> 
> $ time seq 1000000 > /dev/null
> 
> real    0m1.616s
> user    0m1.610s
> sys     0m0.004s
> 
> 
> $ time ./myseq 1000000 > /dev/null
> 
> real    0m0.280s
> user    0m0.275s
> sys     0m0.005s
> 
> 
> Would it be possible to detect arguments which require no
> floating-point, and handle them with integer addition?

I've noticed that too, but it wasn't on my priority list.
Here are some alternatives and timings:

$ time seq 1000000 > /dev/null
real    0m1.236s

$ time yes '' | nl -ba -w1 -s' ' | head -n1000000 > /dev/null
real    0m0.623s

$ time shuf -i 1-1000000 --random-source=/dev/zero > /dev/null
real    0m0.568s

# This uses ascii add from getlimits.c and is arbitrary precision
$ time seq2 1 1 1000000 > /dev/null
real    0m0.379s

# simple for(...) printf(i);
$ time seq.simple > /dev/null
real    0m0.268s

# cat -n uses ascii add optimised for +1 case (next_line_num)
$ time yes '' | cat -n | head -n1000000 > /dev/null
real    0m0.142s

cheers,
Pádraig.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]