From: Carl Witty <cwitty@newtonlabs.com>
Cc: guile-devel@gnu.org
Subject: Re: scm_i_fraction_reduce thread safety
Date: 11 Dec 2003 11:19:02 -0800 [thread overview]
Message-ID: <1071170342.1217.60.camel@flare> (raw)
In-Reply-To: <3FD85844.3060108@ccrma>
On Thu, 2003-12-11 at 03:43, Bill Schottstaedt wrote:
> On the need for reduction, I wonder how much of that
> notoriety is due to Knuth -- his discussion of this
> was in a slightly artificial context, and I've been
> intending for a long time to check some "real-world"
> situation. (I think it's less of a problem than
> calling gcd all the time).
I don't have any data on this (merely uninformed opinions), but I'd be
nervous about not reducing fractions. If you always reduce, I think
that multiplies the cost of operations by about log(n) (where n is the
number of bits in the numerator or denominator) (assuming you use
Euclid's gcd algorithm, instead of something asymptotically faster). On
the other hand, if somebody has an algorithm that builds up fractions
which are almost always reducible, then not reducing can make the
algorithm slower by an arbitrary amount.
For instance, I recently had a problem of coming up with a simple
formula (to find the volume of an n-dimensional simplex, if you're
curious), where part of the problem was to compute
(1/2)*(2/3)*(3/4)*(4/5)*...*(n/(n+1)). When you're working out the
formula, it's easy to recognize that this is 1/(n+1). But if I had just
wanted a few answers, rather than a general formula, I might have
written a little program and ended up with fractions of the form
n!/(n+1)!, which would be highly inefficient to work with for large n.
I think that one way to avoid arbitrarily-bad behavior is to reduce only
if the numerator or denominator is "sufficiently large" (I think this is
at most a constant factor worse than always reducing). For instance, we
could reduce fractions only if the numerator or denominator is a bignum,
in hopes that we will get back to fixnum-sized numbers.
Carl Witty
_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-devel
next prev parent reply other threads:[~2003-12-11 19:19 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-11 11:43 scm_i_fraction_reduce thread safety Bill Schottstaedt
2003-12-11 19:19 ` Carl Witty [this message]
2003-12-12 12:11 ` Bill Schottstaedt
2003-12-12 15:04 ` Paul Jarc
2003-12-12 23:23 ` Kevin Ryde
2004-01-10 22:38 ` Marius Vollmer
2004-01-10 23:29 ` Kevin Ryde
2004-01-11 1:31 ` Marius Vollmer
2004-01-12 0:51 ` Kevin Ryde
2004-01-12 5:22 ` Richard Todd
2004-01-14 21:09 ` Kevin Ryde
2004-01-21 0:03 ` Marius Vollmer
2004-01-21 0:00 ` Marius Vollmer
2004-01-21 3:11 ` Carl Witty
2004-01-21 21:06 ` Marius Vollmer
2004-01-27 22:15 ` Dirk Herrmann
2004-01-27 23:24 ` Rob Browning
2004-01-29 19:35 ` Marius Vollmer
2004-01-29 20:32 ` Rob Browning
2004-01-30 14:45 ` Mikael Djurfeldt
2004-02-01 18:49 ` Andy Wingo
-- strict thread matches above, loose matches on Subject: below --
2003-12-09 20:39 Kevin Ryde
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1071170342.1217.60.camel@flare \
--to=cwitty@newtonlabs.com \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).