Làm thế nào để tôi xác định xem tính toán pi của tôi là chính xác?


772

Tôi đã thử các phương pháp khác nhau để thực hiện một chương trình cung cấp các chữ số pi liên tục. Tôi đã thử phương pháp chuỗi Taylor , nhưng nó đã chứng minh sự hội tụ cực kỳ chậm (khi tôi so sánh kết quả của mình với các giá trị trực tuyến sau một thời gian). Dù sao, tôi đang thử các thuật toán tốt hơn.

Vì vậy, trong khi viết chương trình tôi đã gặp vấn đề, như với tất cả các thuật toán: Làm thế nào để tôi biết rằng các nchữ số mà tôi đã tính toán là chính xác?


20
nhiều hơn một vấn đề toán học. các thuật toán tốt cũng đưa ra ước tính về lỗi.
ví dụ

35
So sánh với pi?
Dave Newton

55
@chris: "Nghĩa đen ở mọi nơi"?
Các cuộc đua nhẹ nhàng trong quỹ đạo

32
Tôi có thể kiểm tra cho bạn tới 3.141592653589793238462643383279502, ngoài ra, tại sao bạn cần một số lượng lớn chữ số như vậy? (Đó là thứ gì đó giống như độ chính xác ở cấp độ nguyên tử với vòng tròn kích thước của vũ trụ.)
AJ Henderson

65
Tại sao bạn không chia cho số pi và kiểm tra xem kết quả có phải là 1 không? (đùa thôi)
user541686

Câu trả lời:


1629

Vì tôi là người giữ kỷ lục thế giới hiện tại với hầu hết các chữ số pi, tôi sẽ thêm hai xu của mình :

Trừ khi bạn thực sự thiết lập một kỷ lục thế giới mới, thực tế phổ biến chỉ là xác minh các chữ số được tính toán dựa trên các giá trị đã biết. Vậy là đủ đơn giản.

Trên thực tế, tôi có một trang web liệt kê các đoạn chữ số với mục đích xác minh các tính toán chống lại chúng: http://www.numberworld.org/digits/Pi/


Nhưng khi bạn vào lãnh thổ kỷ lục thế giới, không có gì để so sánh.

Trong lịch sử, cách tiếp cận tiêu chuẩn để xác minh rằng các chữ số được tính toán là chính xác là tính toán lại các chữ số bằng thuật toán thứ hai. Vì vậy, nếu một trong hai tính toán trở nên tồi tệ, các chữ số ở cuối sẽ không khớp.

Điều này thường không nhiều hơn gấp đôi lượng thời gian cần thiết (vì thuật toán thứ hai thường chậm hơn). Nhưng đó là cách duy nhất để xác minh các chữ số được tính toán khi bạn đi lang thang vào lãnh thổ chưa được khám phá của các chữ số chưa từng được tính toán và một kỷ lục thế giới mới.


Quay trở lại thời mà siêu máy tính đang thiết lập các bản ghi, hai thuật toán AGM khác nhau thường được sử dụng:

Đây là cả hai O(N log(N)^2) thuật toán khá dễ thực hiện.

Tuy nhiên, ngày nay, mọi thứ có một chút khác biệt. Trong ba kỷ lục thế giới gần đây, thay vì thực hiện hai phép tính, chúng tôi chỉ thực hiện một phép tính bằng công thức được biết đến nhanh nhất ( Công thức Chudnovsky ):

Nhập mô tả hình ảnh ở đây

Thuật toán này khó thực hiện hơn nhiều, nhưng nó nhanh hơn rất nhiều so với thuật toán AGM.

Sau đó, chúng tôi xác minh các chữ số nhị phân bằng cách sử dụng các công thức BBP để trích xuất chữ số .

Nhập mô tả hình ảnh ở đây

Công thức này cho phép bạn tính các chữ số nhị phân tùy ý mà không cần tính toán tất cả các chữ số trước nó. Vì vậy, nó được sử dụng để xác minh một vài chữ số nhị phân tính toán cuối cùng. Vì vậy nó là nhiều nhanh hơn so với một tính toán đầy đủ.

Ưu điểm của việc này là:

  1. Chỉ có một tính toán đắt tiền là cần thiết.

Nhược điểm là:

  1. Một thực hiện của Bailey Nhận Borwein Kiếm Plouffe (BBP) là cần thiết.
  2. Một bước bổ sung là cần thiết để xác minh chuyển đổi cơ số từ nhị phân sang thập phân.

Tôi đã trình bày một số chi tiết về lý do tại sao xác minh một vài chữ số cuối cùng ngụ ý rằng tất cả các chữ số là chính xác. Nhưng thật dễ dàng để thấy điều này vì bất kỳ lỗi tính toán nào sẽ lan truyền đến các chữ số cuối cùng.


Bây giờ bước cuối cùng này (xác minh chuyển đổi) thực sự khá quan trọng. Một trong những người giữ kỷ lục thế giới trước đó thực sự đã gọi chúng tôi ra về điều này bởi vì, ban đầu, tôi không đưa ra một mô tả đầy đủ về cách thức hoạt động của nó.

Vì vậy, tôi đã lấy đoạn trích này từ blog của mình:

N = # of decimal digits desired
p = 64-bit prime number

Nhập mô tả hình ảnh ở đây

Tính A sử dụng số học cơ sở 10 và B sử dụng số học nhị phân.

Nhập mô tả hình ảnh ở đây

Nếu A = B, sau đó với "xác suất rất cao", chuyển đổi là chính xác.


Để đọc thêm, hãy xem bài viết trên blog của tôi Pi - 5 nghìn chữ số .


15
Và để trả lời câu hỏi khác về cách nhận biết khi một thuật toán cụ thể đã hội tụ đến N chữ số: Điều này đòi hỏi bạn phải biết hành vi hội tụ của thuật toán. Sê-ri Taylor của ArcTan(1)hội tụ logarit. Vì vậy, bạn cần một số lượng lớn các thuật ngữ để hội tụ - tóm lại, không sử dụng nó.
Bí ẩn

21
Có, công thức của Chudnovsky hội tụ ở mức 14,18 chữ số mỗi kỳ. Vì vậy, bạn có thể chia tổng số chữ số cho số đó để có bao nhiêu thuật ngữ bạn cần. (Giá trị chính xác là Log(151931373056000)/Log(10) = 14.181647462725477655...:)
Bí ẩn

7
@ erikb85 Kinda. Công thức BBP (trong một chừng mực nào đó) được tính là thuật toán thứ hai. Nhưng tự nó không đủ vì nó không xác minh chuyển đổi sang cơ sở 10. Ý tưởng sử dụng kiểm tra chuyển đổi BBP + để loại bỏ nhu cầu tính toán thứ hai không phải là của tôi. Nó được Fabrice Bellard thực hiện lần đầu tiên trong kỷ lục thế giới năm 2009 của anh. Đó là một ý tưởng tốt mà chúng tôi đã làm như vậy và cải thiện nó.
Bí ẩn

83
@FunsukWangadu Tôi chỉ có thể nói cho chính mình, nhưng ở đây nó đi: Tôi thực sự không bao giờ quan tâm đến chính Pi. Đối với tôi, nó chỉ là một số khác. Giá trị không nằm ở chính số hoặc 10 terabyte chữ số vô dụng, đó là phương pháp được sử dụng để đạt được nó. Các thế kỷ toán học, và nhiều thập kỷ nghiên cứu về máy tính / lập trình đã đóng góp cho kỳ tích này được áp dụng cho nhiều lĩnh vực khác và do đó, RẤT NHIỀU hơn một ổ cứng các chữ số. Nói một cách đơn giản: Tính toán các chữ số của Pi là một môn thể thao.
Bí ẩn

8
@Mystical, chỉ tình cờ tìm thấy trang web tính toán Pi của bạn từ một câu hỏi stackoverflow khác và không thể giúp gì ngoài việc cười khúc khích và cười khúc khích với những gì các bạn đã làm. Yêu những thất bại / trận động đất trong nhật ký :) hoàn toàn tuyệt vời!
Joe

48

Không còn nghi ngờ gì nữa, với mục đích của bạn (mà tôi cho rằng chỉ là một bài tập lập trình), điều tốt nhất là kiểm tra kết quả của bạn với bất kỳ danh sách các chữ số pi nào trên web.

Và làm thế nào để chúng ta biết rằng những giá trị đó là chính xác? Chà, tôi có thể nói rằng có những cách khoa học máy tính để chứng minh rằng việc thực hiện một thuật toán là chính xác.

Thực tế hơn, nếu những người khác nhau sử dụng các thuật toán khác nhau và tất cả họ đều đồng ý (chọn một số) một nghìn (triệu, bất cứ thứ gì) số thập phân, điều đó sẽ mang lại cho bạn cảm giác mờ nhạt ấm áp rằng họ đã hiểu đúng.

Trong lịch sử, William Shanks đã xuất bản pi đến 707 vị trí thập phân vào năm 1873. Anh chàng tội nghiệp, anh ta đã phạm sai lầm bắt đầu từ vị trí thập phân thứ 528.

Rất thú vị, vào năm 1995, một thuật toán đã được xuất bản có thuộc tính sẽ tính trực tiếp chữ số thứ n (cơ số 16) của pi mà không phải tính tất cả các chữ số trước đó !

Cuối cùng, tôi hy vọng thuật toán ban đầu của bạn không phải pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...là cách đơn giản nhất để lập trình, nhưng đó cũng là một trong những cách chậm nhất để làm điều đó. Kiểm tra bài viết pi trên Wikipedia để tiếp cận nhanh hơn.


7
Đó là công thức cuối cùng (công thức Leibniz, iirc) thực sự xen kẽ phép cộng và phép trừ.
Thomas

21

Bạn có thể sử dụng nhiều cách tiếp cận và xem liệu chúng có hội tụ cùng một câu trả lời không. Hoặc lấy một số từ 'mạng. Thuật toán Chudnovsky thường được sử dụng như một phương pháp tính toán pi rất nhanh. http://www.craig-wood.com/nick/articles/pi-chudnovsky/


Giảm cơ hội nhưng tôi vẫn không thể chắc chắn với nhiều giải pháp tiếp cận, nếu cả hai đều sai. Kiểm tra trên mạng không có hiệu lực, vậy thì tại sao không lấy giá trị ra khỏi mạng. Tôi đang suy nghĩ về bbp cái nào phù hợp hơn?
Ishan Sharma

7
@IshanSharma Nếu hai thuật toán là độc lập, thì khả năng cả hai tính toán đều sai với kết quả giống hệt nhau là khá nhiều. Nếu bất cứ điều gì sai trong cả hai tính toán, kết quả cuối cùng sẽ không khớp - vì vậy bạn biết ít nhất một trong số đó là sai.
Bí ẩn

15

Sê-ri Taylor là một cách để xấp xỉ pi. Như đã lưu ý nó hội tụ chậm.

Các khoản tiền một phần của loạt Taylor có thể được hiển thị trong một số bội số của thuật ngữ tiếp theo cách xa giá trị thực của pi.

Các phương tiện xấp xỉ pi khác có cách tương tự để tính sai số tối đa.

Chúng tôi biết điều này bởi vì chúng tôi có thể chứng minh nó bằng toán học.


Biệt phái. Tôi nghĩ rằng hầu hết các câu trả lời ở đây chỉ là không đặt đủ trọng lượng vào khái niệm bằng chứng toán học . Dù chương trình của bạn là gì để tính các chữ số của pi, nó sẽ không bao giờ thuyết phục hơn bằng chứng toán học thuyết phục nhất cho thấy phương pháp của chương trình của bạn thực sự tính được pi. Điều này cho thấy một ràng buộc khác nhau đối với các chương trình mà pi tính toán pi: rằng họ phải nhắm nhiều đến mức độ dễ hiểu như hiệu suất và tính chính xác.
Luis Casillas

5

Bạn có thể thử tính toán sin(pi/2)(hoặc cos(pi/2)cho vấn đề đó) bằng cách sử dụng chuỗi sức mạnh hội tụ (khá) nhanh chóng cho tội lỗi và cos. (Thậm chí tốt hơn: sử dụng các công thức nhân đôi khác nhau để tính toán gần hơnx=0 để hội tụ nhanh hơn.)

BTW, tốt hơn so với sử dụng sê-ri cho tan(x), với tính toán cos(x)như một hộp đen (ví dụ: bạn có thể sử dụng sê-ri taylor như trên) là để tìm kiếm root thông qua Newton. Chắc chắn có những thuật toán tốt hơn ngoài kia, nhưng nếu bạn không muốn xác minh hàng tấn chữ số thì điều này đủ (và nó không khó để thực hiện và bạn chỉ cần một chút tính toán để hiểu tại sao nó hoạt động.)


6
Tôi hoàn toàn không thấy nó sẽ giúp phát hiện ra rằng chữ số thứ 1000 bị tắt đi 1. Bạn sẽ cần những giá trị rất chính xác sin(pi/2)phải không?
Matthieu M.

Tôi không biết phải nói gì về câu trả lời trước, trừ khi đó là một trò đùa hoặc một cái gì đó. sin (pi / 2) = 1 cos (pi / 2) = 0 Vì vậy, tôi muốn nói rằng những điều đó chắc chắn hội tụ nhanh.
BentFranklin

15
Tôi đoán nó không phải là hiển nhiên đối với tất cả mọi người mà đánh giá sin(x)cos(x)cho độ chính xác cao là trong thực tế nhiều khó khăn hơn máy tính Pi chính nó.
Bí ẩn

2
Vì những lý do rõ ràng, bạn không nên sử dụng sin (pi / 2) cho việc này. Thay vào đó, tốt hơn là sử dụng sin (pi / 6) và đảm bảo rằng nó xuất hiện chính xác bằng 1/2.
Robert Lozyniak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.