aboutsummaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2015-06-18 17:01:55 +1000
committerAndrew Gerrand <adg@golang.org>2015-06-18 22:16:16 +0000
commit0c247bf41b51b8528e592cdbeffbd237def72f69 (patch)
tree81ceec5516929a1beec5dbf8184479709b6a5456 /src/math
parent2a5745d81e9a5b3af1f0b42f5cbc0d6ba4ba6ec2 (diff)
downloadgo-0c247bf41b51b8528e592cdbeffbd237def72f69.tar.xz
math/big: refine Fibonacci example
Change-Id: Id9e8c3f89e021b9f389ab3c8403e6a8450fa9f5f Reviewed-on: https://go-review.googlesource.com/11231 Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Diffstat (limited to 'src/math')
-rw-r--r--src/math/big/example_test.go38
1 files 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