1 // Copyright 2015 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
12 // Use the classic continued fraction for e
13 // e = [1; 0, 1, 1, 2, 1, 1, ... 2n, 1, 1, ...]
14 // i.e., for the nth term, use
16 // (n-1)/3 * 2 if n mod 3 == 1
17 func recur(n
, lim
int64) *big
.Rat
{
22 term
.SetInt64((n
- 1) / 3 * 2)
29 // Directly initialize frac as the fractional
30 // inverse of the result of recur.
31 frac
:= new(big
.Rat
).Inv(recur(n
+1, lim
))
33 return term
.Add(term
, frac
)
36 // This example demonstrates how to use big.Rat to compute the
37 // first 15 terms in the sequence of rational convergents for
38 // the constant e (base of natural logarithm).
39 func Example_eConvergents() {
40 for i
:= 1; i
<= 15; i
++ {
41 r
:= recur(0, int64(i
))
43 // Print r both as a fraction and as a floating-point number.
44 // Since big.Rat implements fmt.Formatter, we can use %-13s to
45 // get a left-aligned string representation of the fraction.
46 fmt
.Printf("%-13s = %s\n", r
, r
.FloatString(8))
56 // 106/39 = 2.71794872
57 // 193/71 = 2.71830986
58 // 1264/465 = 2.71827957
59 // 1457/536 = 2.71828358
60 // 2721/1001 = 2.71828172
61 // 23225/8544 = 2.71828184
62 // 25946/9545 = 2.71828182
63 // 49171/18089 = 2.71828183
64 // 517656/190435 = 2.71828183