# [Haskell-cafe] The maths behind the Fastest Fibb In The West.

Michael Litchard michael at schmong.org
Sat May 7 05:58:58 UTC 2016

Thanks for your response Erik. It appears I have not articulated my
question well enough.
When p is odd, why is the return value

(f*(f+2*g), f^2 + g^2)

as opposed to the return value of

(f^2+g^2,   g*(2*f-g))

What is it about the boolean value that requires two entirely seperate
things to be done?

On Fri, May 6, 2016 at 7:38 PM, Erik Rantapaa <erantapaa at gmail.com> wrote:

>
>
> On Friday, May 6, 2016 at 6:46:26 PM UTC-5, Michael Litchard wrote:
>>
>> I've been working on a project that needs a good fibonacci generator, and
>> I'm to the point where can now improve upon this one:
>>
>> thanks to this guy:
>>
>> He suggested breaking up a guard into two diffeent functions, which I can
>> do, but I don't know what to call them because I don't know why the
>> operations are different. I'm referring to this section:
>>
>> fib' (f, g) p
>>             | p         = (f*(f+2*g), f^2 + g^2)
>>             | otherwise = (f^2+g^2,   g*(2*f-g))
>>
>> I'd like to know the reason why each guard does two entirely different things, so I know what to call the functions when I seperate them out.
>>
>>
> Clearly `p` is a Bool, and it comes from the expression:
>
>      map (toEnum . fromIntegral) \$ unfoldl divs n
>
> What's going on in `toEnum . fromIntegral` is that a remainder (either 0
> or 1 - it blows up for anything else) is being converted to a Bool, with 0
> mapping to False and 1 mapping to True. So `isOdd` would be a more
> descriptive name for `p`.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...