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

Re: Simple calculator



This thread sort of begs the question, "how many Debian developers does
it take..."

Anyhow, I have been very impressed with some of the calculators proposed 
here; so impressed that I coded them all up as bourne shell functions
and did some profiling.  Because, after all, the speed of your two-digit 
division is important stuff!

This test was only slightly more scientific than the back of a shampoo
bottle, but here are some average results on my PPro 200 for 20 over 13:

bc (Joey Hess): 1.53846153846153846153
  0.028s
gs (Rob Browning): 1.53846157
  0.388s
guile (Rob Browning): 1.53846153846154
  0.832s
metafont (Marcus Mrinkmann): 1.53847
  0.174s
perl (John Lapeyre): 1.53846153846154
  0.025s

Perl and bc seem comparable in speed, but bc wins because it's using bcd
and has more precision.  Surprisingly, metafont is in third place, but I
think the metafont and gs solution score big points for being cool
hacks.  gs loses some points for rounding a 3 up to a 7(!), though.
Guile, well, guile's a new language :-)

The winner: metafont, for coming in with respectable speed *and* being a 
   really cool hack.  Congratulations to Marcus.


Here's the benchmark script, you can put these functions in your
.profile if you're a sadist:


#!/bin/bash
# (Because it doesn't work with ash :-)

bc_calc () {
  # Joey Hess <joey@kitenet.net>
  echo $* | bc -l
}
echo -n "bc: "; time bc_calc 20/13

gs_calc() {
  # Rob Browning <rlb@cs.utexas.edu>
  # With some cleanup by myself
  echo $* | gs -q -sDEVICE=nullpage | sed 's/^GS>//'
}
echo -n "gs: "; time gs_calc 20 13 div ==

guile_calc() {
  # Rob Browning <rlb@cs.utexas.edu>
  guile -c "(display ($*))"; echo
}
echo -n "guile: "; time guile_calc / 20 13

mf_calc() {
  # Marcus Mrinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>
  # With some cleanup by me
  # Extra geek points for this one.
  cat <<EOD | mf | sed -n 's/\*>> \(.*\)/\1/p'
\relax
a=$*; show a;
\bye
EOD
}
echo -n "metafont: "; time mf_calc 20/13

perl_calc() {
  # John Lapeyre <lapeyre@physics.Arizona.EDU>
  perl -e "print $*,\"\n\""
}
echo -n "perl: "; time perl_calc 20/13



-- 
Neale Pickett, propellerhead       Contact information in headers
Los Alamos National Laboratory, Network Engineering Group (CIC-5)


--  
To UNSUBSCRIBE, email to debian-devel-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org


Reply to: