hn4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com
Full version available at http://4u.jcisio.com/r/article1012.htm

Hải Nam

Tại sao tôi tính số pi?

Tôi sớm yêu toán vì tôi có năng khiếu về môn này. Khi học lớp 6, tôi thích làm những phép chia dài bởi vì nó trở nên dễ dàng đối với tôi. Rồi sau đó, trên trung học, khai phương bằng tay thật là thú vị. Tôi yêu toán và tôi thích làm tính.

Lúc đầu, người ta bảo tôi là pi bằng 22/7, và chúng tôi giải những bài toán như là: chu vi của đường tròn có đường kính 7 inch sẽ là 22 inch. Sau đó tôi biết rằng 22/7 chỉ là một giá trị gần đúng của p. Pi là con số như thế đầu tiên đối với tôi. Khi tôi biết những kết quả, đại loại như là: căn bậc hai của 3, tôi biết cách tính kết quả vì tôi biết khai phương số 3. Nhưng khi kết quả chứa số pi, tôi không biết nhiều về nó.

Sau này, khi chúng tôi học logarit, lũy thừa và các hàm lượng giác, có rất nhiều kết quả tính là là số gần đúng, nhưng pi là con số như thế đầu tiên đối với tôi.

Lần đầu tiên tôi tính số pi với các kết quả chính xác hơn cần thiết, tôi đã tính đến 50 chữ số thập phân với tờ giấy, cây bút chỉ và một máy tính tay. Tôi dùng biểu thức:

Mã lệnh
Pi = 16 * ArcTan(1/5) - 4 * ArcTan(1/239)
ArcTan(1/x) = 1/x - 1/(3 * x**3) + 1/(5 * x**5) - ...

Các phép tính  này tôi làm vào đầu những năm 1970. Còn công thức trên được John Machin (1685-1751) tìm thấy năm 1706. Sau khi tôi có chiếc Apple II+ năm 1979, tôi đã tính số pi với 15 300 chữ số thập phân bằng chương trình Apple Pascal và công thức:

Mã lệnh
Pi = 48 * ArcTan(1/18) + 32 * ArcTan(1/57) - 20 * ArcTan(1/239)

Đó cũng là công thức tôi dùng để tính pi với 114 632 chữ số vào năm 1989, với Borland Turbo Pascal trên máy IBM AT. Công thức trên là của Gao-xơ (Carl Friedrich Gauss, 1777-1855).

Tôi đã phát triển một chương trình hoàn chỉnh trên PC có khả năng tính đến 1 000 000 chữ số, với thời gian chạy khoảng O(n Log3n).

Thuật toán sử dụng được đề cập trong Scientific American (tháng 2 năm 1988), Ramanujan and Pi, của tác giả Jonathan M. Borwein và Peter B. Borwein.

Thuật toán a

Đặt y[0] = SqRt(1/2), x[0] = 1/2

Mã lệnh
y[n] = (1 - SqRt(1 - y[n-1]^2)) / (1 + SqRt(1 - y[n-1]^2))
x[n] = ((1+ + y[n])^2 * x[n-1]) - 2^n * y[n]

Thuật toán b

Đặt y[0] = SqRt(2) - 1, x[0] = 6 - 4 * SqRt(2)

Mã lệnh
y[n] = (1 - SqRt(SqRt(1 - y[n-1]^4))) / (1 + SqRt(SqRt(1 - y[n-1]^4)))
x[n] = ((1 + y[n])^4 * x[n-1]) - 2^(2n+1) * y[n] * (1 + y[n] + y[n]^2)

Trong cả hai thuật toán, dãy x[n] hội tụ về 1/p. Algorithm a is quadratically convergent and algorithm b is quartically convergent.


hainam4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com