can multi-core improve single funciton?

Cameron Laird claird at lairds.us
Thu Feb 19 09:33:02 EST 2009


In article <pan.2009.02.18.07.24.36 at REMOVE.THIS.cybersource.com.au>,
Steven D'Aprano  <steven at REMOVE.THIS.cybersource.com.au> wrote:
>> 			.
>> 			.
>> 			.
>>>> And now for my version (which admitedly isn't really mine, and returns
>>>> slightly incorrect fib(n) for large values of n, due to the limited
>>>> floating point precision).
>>>
>>>The floating point version is nice, but it starts giving incorrect
>>>answers relatively early, from n=71. But if you don't need accurate
>>>results (a relative error of 3e-15 for n=71), it is very fast.
>> 			.
>> 			.
>> 			.
>> While my personal opinion is that it's silly to characterize an error of
>> 3e-15 as not "accurate", 
>
>That's a *relative* error. The absolute error is 1 for n=71, 59 for n=80, 
>1196093 for n=100, and 1875662300654090482610609259 for n=200. As far as 
>I can tell, the absolute error grows without bounds as n increases -- and 
>it overflows at n=1475.
>
>I agree that a relative error is small, and if your use allows it, then 
>by all means use the inexact floating point function. But if you need 
>exact results, then you won't get it using floats.
>
>
>
>> I think more constructive is to focus on the
>> fact that the closed-form solution can be touched up to give a precise
>> integral solution, while re- taining its (approximately) O(log n)
>> run-time cost.
>
>I doubt that. Since both phi and sqrt(5) are irrational numbers, it would 
>require an infinite number of integer digits to get precise integral 
>solutions unless there was some sort of freakish cancellation. But you 
>probably could get a very good integral solution which gives exact 
>results up to whatever limit you wanted, bound only by the amount of 
>memory and time you were willing to spend.
			.
			.
			.
There *is* freakish cancellation.

I entirely recognize that Python builds in floating-point
calculations of limited precision.  The closed-form expres-
sion for Fibonacci, though, is exact, and can be coded in
terms of, for example, Python infinite-precision integers.
If there's sufficient interest, I'll cheerfully do so, al-
though only after meeting my own deadlines for February
for commitments outside comp.lang.python.



More information about the Python-list mailing list