seems like math accuracy issues are known, or even, by design. see:
https://github.com/golang/go/issues/9546
https://github.com/golang/go/issues/9545


On Sunday, 6 May 2018 00:05:13 UTC+3, Paul Hankin wrote:
>
> On Friday, 27 April 2018 23:57:42 UTC+2, Michael Jones wrote:
>>
>> Yuval,
>>
>> There are fundamental issues here.
>>
>> 1. That equation (de Moivre, Binet) is from the algebra of ideal numbers. 
>> Numbers of infinite precision. Not the realm of computer arithmetic. It 
>> works fine with double precision (go: float64, c/c++: double) up to F(75) 
>> but must fail for F(76) due to the limited precision of 64-bit floating 
>> point and has nothing to do with language.
>>
>> F(76) = 3416454622906707 but the best we can do in 64 bits is 
>> 3416454622906706 even with a Pow() function good to +/-1 least significant 
>> bit.
>>
>> 2. Another difference between algebra and computer arithmetic 
>> (well...actually about the floor function) is that one of your two power 
>> terms is not needed. Psi < 1 so Psi^N is pretty small, so small, that it 
>> never changes the value of the rounded result. So you can just evaluate:
>>
>> return round(math.Pow(math.Phi, float_n) / sqrt_5)
>>
>
> A neat not-very-well-known trick is to use that phi^n = Fib(n)phi + 
> Fib(n-1). Numbers of the form a*phi+b where a and b are integers are closed 
> under multiplication, so you can compute phi^n exactly using integer 
> arithmetic -- in log(n) arithmetic operations.
>
> https://play.golang.org/p/j4mZ93c820R
>
> -- 
> Paul
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to