|  | // Copyright 2015 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // +build ignore | 
|  |  | 
|  | package big_test | 
|  |  | 
|  | import ( | 
|  | "fmt" | 
|  | "math/big" | 
|  | ) | 
|  |  | 
|  | // Use the classic continued fraction for e | 
|  | //     e = [1; 0, 1, 1, 2, 1, 1, ... 2n, 1, 1, ...] | 
|  | // i.e., for the nth term, use | 
|  | //     1          if   n mod 3 != 1 | 
|  | //  (n-1)/3 * 2   if   n mod 3 == 1 | 
|  | func recur(n, lim int64) *big.Rat { | 
|  | term := new(big.Rat) | 
|  | if n%3 != 1 { | 
|  | term.SetInt64(1) | 
|  | } else { | 
|  | term.SetInt64((n - 1) / 3 * 2) | 
|  | } | 
|  |  | 
|  | if n > lim { | 
|  | return term | 
|  | } | 
|  |  | 
|  | // Directly initialize frac as the fractional | 
|  | // inverse of the result of recur. | 
|  | frac := new(big.Rat).Inv(recur(n+1, lim)) | 
|  |  | 
|  | return term.Add(term, frac) | 
|  | } | 
|  |  | 
|  | // This example demonstrates how to use big.Rat to compute the | 
|  | // first 15 terms in the sequence of rational convergents for | 
|  | // the constant e (base of natural logarithm). | 
|  | func Example_eConvergents() { | 
|  | for i := 1; i <= 15; i++ { | 
|  | r := recur(0, int64(i)) | 
|  |  | 
|  | // Print r both as a fraction and as a floating-point number. | 
|  | // Since big.Rat implements fmt.Formatter, we can use %-13s to | 
|  | // get a left-aligned string representation of the fraction. | 
|  | fmt.Printf("%-13s = %s\n", r, r.FloatString(8)) | 
|  | } | 
|  |  | 
|  | // Output: | 
|  | // 2/1           = 2.00000000 | 
|  | // 3/1           = 3.00000000 | 
|  | // 8/3           = 2.66666667 | 
|  | // 11/4          = 2.75000000 | 
|  | // 19/7          = 2.71428571 | 
|  | // 87/32         = 2.71875000 | 
|  | // 106/39        = 2.71794872 | 
|  | // 193/71        = 2.71830986 | 
|  | // 1264/465      = 2.71827957 | 
|  | // 1457/536      = 2.71828358 | 
|  | // 2721/1001     = 2.71828172 | 
|  | // 23225/8544    = 2.71828184 | 
|  | // 25946/9545    = 2.71828182 | 
|  | // 49171/18089   = 2.71828183 | 
|  | // 517656/190435 = 2.71828183 | 
|  | } |