From 0c247bf41b51b8528e592cdbeffbd237def72f69 Mon Sep 17 00:00:00 2001 From: Andrew Gerrand Date: Thu, 18 Jun 2015 17:01:55 +1000 Subject: [PATCH] math/big: refine Fibonacci example Change-Id: Id9e8c3f89e021b9f389ab3c8403e6a8450fa9f5f Reviewed-on: https://go-review.googlesource.com/11231 Reviewed-by: Robert Griesemer Reviewed-by: Josh Bleecher Snyder --- src/math/big/example_test.go | 38 ++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/math/big/example_test.go b/src/math/big/example_test.go index 8cbd379b92..ac7955219d 100644 --- a/src/math/big/example_test.go +++ b/src/math/big/example_test.go @@ -51,34 +51,30 @@ func ExampleInt_Scan() { // Output: 18446744073709551617 } -// Example_fibonacci demonstrates how to use big.Int to compute the smallest -// Fibonacci number with 100 decimal digits, and find out whether it is prime. +// This example demonstrates how to use big.Int to compute the smallest +// Fibonacci number with 100 decimal digits and to test whether it is prime. func Example_fibonacci() { - // create and initialize big.Ints from int64s - fib1 := big.NewInt(0) - fib2 := big.NewInt(1) + // Initialize two big ints with the first two numbers in the sequence. + a := big.NewInt(0) + b := big.NewInt(1) - // initialize limit as 10^99 (the smallest integer with 100 digits) + // Initialize limit as 10^99, the smallest integer with 100 digits. var limit big.Int limit.Exp(big.NewInt(10), big.NewInt(99), nil) - // loop while fib1 is smaller than 1e100 - for fib1.Cmp(&limit) < 0 { - // Compute the next Fibonacci number: - // t1 := fib2 - // t2 := fib1.Add(fib1, fib2) // Note that Add "assigns" to fib1! - // fib1 = t1 - // fib2 = t2 - // Using Go's multi-value ("parallel") assignment, we can simply write: - fib1, fib2 = fib2, fib1.Add(fib1, fib2) + // Loop while a is smaller than 1e100. + for a.Cmp(&limit) < 0 { + // Compute the next Fibonacci number, storing it in a. + a.Add(a, b) + // Swap a and b so that b is the next number in the sequence. + a, b = b, a } + fmt.Println(a) // 100-digit Fibonacci number - fmt.Println(fib1) // 100-digit Fibonacci number - - // Test fib1 for primality. The ProbablyPrimes parameter sets the number - // of Miller-Rabin rounds to be performed. 20 is a good value. - isPrime := fib1.ProbablyPrime(20) - fmt.Println(isPrime) + // Test a for primality. + // (ProbablyPrimes' argument sets the number of Miller-Rabin + // rounds to be performed. 20 is a good value.) + fmt.Println(a.ProbablyPrime(20)) // Output: // 1344719667586153181419716641724567886890850696275767987106294472017884974410332069524504824747437757 -- 2.50.0