ฉันจะตรวจสอบว่าการคำนวณ pi ของฉันถูกต้องได้อย่างไร


772

ฉันลองใช้วิธีการต่าง ๆ เพื่อใช้โปรแกรมที่ให้ตัวเลขของไพตามลำดับ ฉันลองวิธีของซีรีส์เทย์เลอร์แต่มันพิสูจน์แล้วว่ามาบรรจบกันช้ามาก (เมื่อฉันเปรียบเทียบผลลัพธ์ของฉันกับค่าออนไลน์หลังจากเวลาผ่านไป) อย่างไรก็ตามฉันพยายามอัลกอริทึมที่ดีกว่า

ดังนั้นในขณะที่เขียนโปรแกรมฉันติดอยู่กับปัญหาเช่นเดียวกับอัลกอริธึมทั้งหมด: ฉันจะรู้ได้อย่างไรว่าnตัวเลขที่ฉันคำนวณมีความถูกต้อง?


20
ปัญหาคณิตศาสตร์มากขึ้น อัลกอริทึมที่ดียังให้การประมาณข้อผิดพลาด
ตัวอย่าง

35
เปรียบเทียบกับ pi?
เดฟนิวตัน

55
@chris: "ทุกที่ตามตัวอักษร"?
การแข่งขัน Lightness ใน Orbit

32
ฉันสามารถตรวจสอบคุณได้มากถึง 3.141592653589793238462643383279502 ยิ่งไปกว่านั้นทำไมคุณถึงต้องการตัวเลขจำนวนมาก? (นั่นคือความแม่นยำระดับอะตอมกับวงกลมขนาดของจักรวาล)
AJ Henderson

65
ทำไมคุณไม่หารด้วย pi และตรวจสอบว่าผลลัพธ์เป็น 1 หรือไม่ (ล้อเล่น)
user541686

คำตอบ:


1629

เนื่องจากฉันเป็นเจ้าของสถิติโลกในปัจจุบันสำหรับตัวเลขส่วนใหญ่ของไพฉันจะเพิ่มสองเซ็นต์ของฉัน:

เว้นแต่ว่าคุณกำลังตั้งค่าสถิติโลกจริงการปฏิบัติทั่วไปก็เพื่อตรวจสอบตัวเลขที่คำนวณกับค่าที่ทราบ นั่นง่ายพอ

ในความเป็นจริงฉันมีหน้าเว็บที่แสดงตัวอย่างข้อมูลตัวเลขเพื่อตรวจสอบการคำนวณกับพวกเขา: http://www.numberworld.org/digits/Pi/


แต่เมื่อคุณเข้าสู่ดินแดนสถิติโลกไม่มีอะไรที่จะเปรียบเทียบได้

ในอดีตแนวทางมาตรฐานสำหรับการตรวจสอบว่าตัวเลขที่คำนวณนั้นถูกต้องคือการคำนวณตัวเลขใหม่โดยใช้อัลกอริทึมที่สอง ดังนั้นหากการคำนวณใดไม่ดีตัวเลขท้ายที่สุดจะไม่ตรงกัน

โดยทั่วไปจะใช้เวลามากกว่าสองเท่า (เนื่องจากอัลกอริทึมที่สองมักจะช้ากว่า) แต่มันเป็นวิธีเดียวที่จะตรวจสอบตัวเลขที่คำนวณได้เมื่อคุณเดินเข้าไปในดินแดนที่ไม่จดที่แผนที่ของตัวเลขที่ไม่เคยคำนวณมาก่อนและสถิติโลกใหม่


ย้อนกลับไปในวันที่ซูเปอร์คอมพิวเตอร์กำลังตั้งค่าการบันทึกมีการใช้อัลกอริทึม AGM ที่แตกต่างกันสองแบบ:

นี่เป็นO(N log(N)^2)อัลกอริธึมที่ใช้งานง่าย

อย่างไรก็ตามทุกวันนี้สิ่งต่าง ๆ เล็กน้อย ในการบันทึกสถิติโลกสามครั้งล่าสุดแทนที่จะทำการคำนวณสองครั้งเราทำการคำนวณเพียงครั้งเดียวโดยใช้สูตรที่รู้จักกันเร็วที่สุด ( Chudnovsky Formula ):

ป้อนคำอธิบายภาพที่นี่

อัลกอริทึมนี้ยากที่จะนำไปใช้ แต่จะเร็วกว่าอัลกอริทึม AGM มาก

แล้วเราจะตรวจสอบตัวเลขไบนารีโดยใช้สูตร BBP สำหรับการสกัดบาท

ป้อนคำอธิบายภาพที่นี่

สูตรนี้ช่วยให้คุณสามารถคำนวณเลขฐานสองโดยพลการโดยไม่ต้องคำนวณตัวเลขทั้งหมดก่อนหน้า ดังนั้นจึงใช้เพื่อตรวจสอบเลขฐานสองที่คำนวณล่าสุด ดังนั้นมันจะมากได้เร็วกว่าการคำนวณเต็ม

ข้อดีของสิ่งนี้คือ:

  1. ต้องการการคำนวณราคาแพงเพียงครั้งเดียวเท่านั้น

ข้อเสียคือ:

  1. จำเป็นต้องมีการใช้งานสูตรBailey – Borwein – Plouffe (BBP)
  2. จำเป็นต้องมีขั้นตอนเพิ่มเติมเพื่อตรวจสอบการแปลงฐานจากเลขฐานสองเป็นทศนิยม

ฉันได้ทำการตรวจสอบรายละเอียดบางส่วนว่าทำไมการตรวจสอบตัวเลขสองสามตัวสุดท้ายหมายความว่าตัวเลขทั้งหมดนั้นถูกต้อง แต่มันง่ายที่จะเห็นสิ่งนี้เนื่องจากข้อผิดพลาดในการคำนวณใด ๆ จะแพร่กระจายไปยังตัวเลขสุดท้าย


ตอนนี้ขั้นตอนสุดท้าย (การตรวจสอบการแปลง) เป็นจริงที่สำคัญพอสมควร หนึ่งในผู้ถือสถิติโลกก่อนหน้านี้ได้เรียกพวกเราออกมาเกี่ยวกับเรื่องนี้เพราะในขั้นต้นฉันไม่ได้ให้คำอธิบายที่เพียงพอเกี่ยวกับวิธีการทำงาน

ดังนั้นฉันจึงดึงตัวอย่างนี้จากบล็อกของฉัน:

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

ป้อนคำอธิบายภาพที่นี่

คำนวณ A โดยใช้เลขฐานสิบ 10 และ B โดยใช้เลขฐานสอง

ป้อนคำอธิบายภาพที่นี่

หากA = Bด้วย "ความน่าจะเป็นที่สูงมาก" การแปลงจะถูกต้อง


สำหรับการอ่านเพิ่มเติมดูโพสต์บล็อกของฉันPi - 5 ล้านล้านหลัก


15
และเพื่อตอบคำถามอื่น ๆ เกี่ยวกับวิธีรู้เมื่ออัลกอริทึมเฉพาะแปลงเป็นตัวเลข N: คุณต้องทราบพฤติกรรมการบรรจบกันของอัลกอริทึม ซีรี่ส์ Taylor ของArcTan(1)บรรจบกันแบบลอการิทึม ดังนั้นคุณต้องมีคำศัพท์จำนวนมากเพื่ออธิบายอย่างย่อ - อย่าใช้มัน
ลึกลับ

21
ใช่สูตรของ Chudnovsky มาบรรจบกันที่ 14.18 หลักต่อเทอม เพื่อให้คุณสามารถหารจำนวนหลักทั้งหมดเพื่อให้ได้จำนวนคำศัพท์ที่คุณต้องการ (ค่าที่แน่นอนคือLog(151931373056000)/Log(10) = 14.181647462725477655...)
Mysticial

7
@ erikb85 Kinda สูตร BBP (บางส่วน) นับเป็นอัลกอริทึมที่สอง แต่ด้วยตัวเองมันไม่เพียงพอเพราะมันไม่ได้ตรวจสอบการแปลงเป็นฐาน 10 แนวคิดของการใช้การตรวจสอบการแปลง BBP + เพื่อกำจัดความจำเป็นในการคำนวณครั้งที่สองไม่ใช่ของฉัน มันถูกสร้างขึ้นเป็นครั้งแรกโดย Fabrice Bellard ในสถิติโลกปี 2009 ของเขา มันเป็นความคิดที่ดีที่เราทำแบบเดียวกันและปรับปรุงให้ดีขึ้น
ลึกลับ

83
@FunsukWangadu ฉันสามารถพูดเพื่อตัวเองเท่านั้น แต่ที่นี่มันไป: ฉันไม่เคยใส่ใจเกี่ยวกับ Pi เอง สำหรับฉันมันเป็นเพียงตัวเลขอื่น ค่าไม่ได้อยู่ในจำนวนตัวเองหรือ 10 เทราไบต์ของตัวเลขไร้ประโยชน์มันเป็นวิธีการที่ใช้เพื่อให้บรรลุ คณิตศาสตร์มาหลายศตวรรษและการวิจัยด้านคอมพิวเตอร์ / การเขียนโปรแกรมที่มีส่วนทำให้ความสำเร็จนี้สามารถนำไปใช้กับสาขาอื่น ๆ ได้ดังนั้นจึงมีคุณค่ามากกว่าฮาร์ดไดรฟ์ของตัวเลข เพื่อให้ง่ายขึ้น: การคำนวณตัวเลขของ Pi เป็นกีฬามากกว่า
Mysticial

8
@ ลึกลับเพียงสะดุดในเว็บไซต์การคำนวณ Pi ของคุณจากคำถาม stackoverflowอื่นและไม่สามารถช่วยได้ แต่เพ่งมองและหัวเราะคิกคักในสิ่งที่พวกคุณทำ ชอบความล้มเหลวของฮาร์ดไดรฟ์ / แผ่นดินไหวในบันทึก :) บริสุทธิ์ที่น่าทึ่ง!
โจ

48

ไม่ต้องสงสัยเลยว่าสำหรับวัตถุประสงค์ของคุณ (ซึ่งฉันคิดว่าเป็นเพียงแบบฝึกหัดการเขียนโปรแกรม) สิ่งที่ดีที่สุดคือการตรวจสอบผลลัพธ์ของคุณเทียบกับรายชื่อตัวเลขใด ๆ ของ pi บนเว็บ

และเราจะรู้ได้อย่างไรว่าค่าเหล่านั้นถูกต้อง? ฉันสามารถพูดได้ว่ามีวิธีวิทยาการคอมพิวเตอร์เพื่อพิสูจน์ว่าการใช้อัลกอริทึมนั้นถูกต้อง

ในทางปฏิบัติหากผู้ใช้ที่แตกต่างกันใช้อัลกอริธึมที่แตกต่างกันและพวกเขาทั้งหมดตกลงที่จะเลือกทศนิยมหนึ่งพัน (ล้านหรืออะไรก็ตาม) ที่ควรให้ความรู้สึกอบอุ่นแบบฟัซซี่ที่ถูกต้อง

ในอดีต William Shanks ได้ตีพิมพ์ไพน์ถึง 707 ตำแหน่งทศนิยมในปี 1873 ชายผู้น่าสงสารเขาทำผิดพลาดตั้งแต่ตำแหน่งทศนิยมที่ 528

น่าสนใจมากในปี 1995 อัลกอริทึมได้รับการเผยแพร่ซึ่งมีคุณสมบัติที่จะคำนวณตัวเลข nth (ฐาน 16) ของ pi โดยตรงโดยไม่ต้องคำนวณตัวเลขก่อนหน้าทั้งหมด !

ในที่สุดฉันหวังว่าอัลกอริทึมเริ่มต้นของคุณpi/4 = 1 - 1/3 + 1/5 - 1/7 + ...อาจไม่ใช่โปรแกรมที่ง่ายที่สุด แต่ก็เป็นวิธีที่ช้าที่สุดวิธีหนึ่งในการทำเช่นนั้น ตรวจสอบบทความ pi บน Wikipediaเพื่อหาแนวทางที่รวดเร็วยิ่งขึ้น


7
สูตรสุดท้ายนั้น (สูตร Leibniz, iirc) จริง ๆ แล้วเป็นการเติมและลบ
โทมัส

21

คุณสามารถใช้หลายวิธีและดูว่าพวกเขามาบรรจบกับคำตอบเดียวกันหรือไม่ หรือคว้าบางส่วนจาก 'สุทธิ อัลกอริทึม Chudnovsky มักใช้เป็นวิธีการคำนวณ pi ที่รวดเร็วมาก http://www.craig-wood.com/nick/articles/pi-chudnovsky/


ลดโอกาส แต่ฉันก็ยังไม่แน่ใจกับวิธีการแก้ปัญหาแบบหลายทางถ้าทั้งคู่ผิด การตรวจสอบบนเน็ตไม่ถือความถูกต้องแล้วทำไมไม่เอาค่าออกด้วยตัวเอง ฉันกำลังคิดเกี่ยวกับ bbp อันไหนที่เหมาะกว่า?
Ishan Sharma

7
@IshanSharma หากทั้งสองอัลกอริทึมเป็นอิสระกว่าโอกาสที่การคำนวณทั้งสองอย่างผิดปกติกับผลลัพธ์ที่เหมือนกันจะมีค่าเท่ากับศูนย์ หากมีสิ่งใดผิดพลาดในการคำนวณผลลัพธ์สุดท้ายจะไม่ตรงกันดังนั้นคุณจึงรู้ว่าอย่างน้อยหนึ่งรายการนั้นผิด
ลึกลับ

15

ซีรี่ส์ Taylor เป็นวิธีหนึ่งในการประมาณ Pi ตามที่ระบุไว้มันมาบรรจบกันอย่างช้าๆ

ผลรวมบางส่วนของซีรีย์เทย์เลอร์สามารถแสดงให้เห็นว่าภายในตัวคูณของเทอมถัดไปจากมูลค่าที่แท้จริงของปี่

วิธีอื่นในการประมาณค่า pi มีวิธีการคำนวณข้อผิดพลาดสูงสุดเช่นเดียวกัน

เรารู้สิ่งนี้เพราะเราสามารถพิสูจน์ได้ในเชิงคณิตศาสตร์


หนุน ผมคิดว่าส่วนใหญ่ของคำตอบที่นี่เป็นเพียงการไม่ได้วางน้ำหนักเกือบเพียงพอในแนวคิดของการพิสูจน์ทางคณิตศาสตร์ สิ่งที่โปรแกรมของคุณใช้สำหรับการคำนวณตัวเลขของ pi จะไม่มีทางเชื่อได้มากไปกว่าการพิสูจน์ทางคณิตศาสตร์ที่น่าเชื่อถือที่สุดซึ่งวิธีการของโปรแกรมของคุณจะคำนวณ pi อย่างแน่นอน ซึ่งชี้ให้เห็นข้อ จำกัด ที่แตกต่างกันในโปรแกรมที่ pi คำนวณ pi: พวกเขาควรมีจุดมุ่งหมายเพื่อความเข้าใจในเรื่องประสิทธิภาพและความถูกต้อง
Luis Casillas

5

คุณสามารถลองคำนวณsin(pi/2)(หรือcos(pi/2)สำหรับเรื่องนั้น) โดยใช้ (ค่อนข้าง) บรรจบชุดพลังงานอย่างรวดเร็วสำหรับบาปและ cos (ดียิ่งขึ้น: ใช้สูตรสองเท่าต่าง ๆ เพื่อคำนวณค่าที่ใกล้เคียงx=0ยิ่งขึ้นเพื่อการลู่เข้าที่เร็วขึ้น)

BTW ดีกว่าการใช้ซีรี่ส์สำหรับtan(x)คือการคำนวณบอกว่าcos(x)เป็นกล่องดำ (เช่นคุณสามารถใช้ชุดเทย์เลอร์ตามที่กล่าวไว้ข้างต้น) คือทำการค้นหารากผ่านนิวตัน แน่นอนว่ามีอัลกอริธึมที่ดีกว่า แต่ถ้าคุณไม่ต้องการตรวจสอบความถูกต้องของตัวเลขนี่น่าจะพอแล้ว (และมันก็ไม่ใช่เรื่องยากที่จะนำมาใช้และคุณต้องการแคลคูลัสสักเล็กน้อยเพื่อทำความเข้าใจว่าทำไมมันถึงใช้งานได้)


6
ฉันไม่ค่อยเห็นว่ามันจะช่วยให้เห็นว่าตัวเลข 1,000 หลักถูกปิดด้วย 1 คุณจะต้องมีค่าที่แม่นยำมาก ๆsin(pi/2)ใช่มั้ย
Matthieu M.

ฉันไม่แน่ใจว่าจะพูดอะไรเกี่ยวกับคำตอบก่อนหน้าเว้นแต่จะเป็นเรื่องตลกหรืออะไรบางอย่าง sin (pi / 2) = 1 cos (pi / 2) = 0 ดังนั้นฉันจะบอกว่าสิ่งเหล่านี้มาบรรจบกันอย่างรวดเร็ว
BentFranklin

15
ฉันเดาว่ามันไม่ชัดเจนสำหรับทุกคนที่ประเมินsin(x)และcos(x)ความแม่นยำสูงจริงๆแล้วมันยากกว่าการคำนวณ Pi เอง
Mysticial

2
ด้วยเหตุผลที่ชัดเจนคุณไม่ควรใช้ sin (pi / 2) สำหรับสิ่งนี้ ดีกว่าแทนที่จะใช้บาป (pi / 6) และตรวจสอบให้แน่ใจว่ามันออกมาเป็น 1/2
Robert Lozyniak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.