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.