الثوابت الرقمية التقريبية مثل PI (3.1415926 ...) و PHI (1.6180339 ...) لدقة تعسفية باستخدام فئة Java BigDecimal (وتحليل النتائج).
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
ملاحظة: يتطلب هذا المشروع الحد الأدنى من Java 14 لتشغيله. يوصى بـ Java 15 لأنه أحدث إصدار من كتابة هذه الوثائق.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
يوضح Computephi خوارزمية أنه بغض النظر عن المصطلحين الذي تبدأ بهما ، إذا قمت بإنشاء سلسلة من الأرقام عن طريق إضافة المصطلحين السابقتين ، فإن النسبة بين المصطلحات المتتالية تتقارب إلى PHI (النسبة الذهبية).
java ComputePhi <first-term> <second-term> <iterations> <precision> [options]
--print_steps (-p) # Print approximation for each iteration of algorithm.
--compare_values (-c) # Compare sequential iterations' results, and stop iterating early if they are equal. # The Fibonacci sequence
java ComputePhi 1 1 10 10
# The Lucas numbers (printing each step)
java ComputePhi 2 1 10 10 -p
# Go wild if you want to!
java ComputePhi 23 9001 200 1000 --print_steps
java ComputePhi 314 159 200 20000 --compare_valuesComputepi يوضح 7 خوارزميات مختلفة لتقريب PI. ثم تتم مقارنة النتيجة بملف محسّن من مليون رقم من PI (تم الحصول عليه من هنا) لتحديد الدقة.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> رقمًا أو اسمًا خوارزمية (غير حساس للحالة):| رقم | اسم الخوارزمية | مرجع |
|---|---|---|
| 1 | غريغوري ليبنيز | [1] |
| 2 | نيلاكانثا | [2] |
| 3 | نيوتن | [3] |
| 4 | فييت | [4] |
| 5 | واليس | [5] |
| 6 | Chudnovsky | [6] |
| 7 | برنت-سالامين (أو غاوس-بايدردر) | [7] |
--all_digits (-a) # Print all digits (default only prints accurate digits).
--print_steps (-p) # Print approximation for each iteration of algorithm.
--compare_values (-c) # Compare sequential iterations' results, and stop iterating early if they are equal.
--estimate_memory_usage (-e) # Print an estimate of memory usage.
java ComputePi 1 1000 10
java ComputePi 2 1000 10 --print_steps
java ComputePi CHUDNOVSKY 10 100 --compare_values --estimate_memory_usage يقارن pialgorithmexaminer التقريب وأوقات التشغيل واستخدام الذاكرة للخوارزميات التي تم تنفيذها في تكرار computepi حسب التكلفة ، ويطبع النتائج إلى output.txt الملف. txt ، ثم يطبع تحليل البيانات بجدول في الإخراج القياسي.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> هي قائمة مفصولة بفاصلة لأسماء وأرقام الخوارزمية (انظر أعلاه للحصول على القيم). --skip_tests (-s) # Skip running the tests (only use to re-analyze already generated output data).
--print_table (-p) # Print the analysis as a table (defaults to printing results in a "key:value" format, which is more useful for large datasets). java PiAlgorithmExaminer CHUDNOVSKY,BRENT_SALAMIN 1000 2000
java PiAlgorithmExaminer 1,2,3,4,5,6,7 10 2000 --print_table # <----- outputs results shown belowلاحظ أن بعض الخوارزميات أبطأ بكثير في حسابها من غيرها. على سبيل المثال ، تحسب صيغة Viete جذرًا تربيعيًا لكل تكرار ، وبالتالي فهي أبطأ نسبيًا من الخوارزميات الأخرى.
فيما يلي مثال على إخراج البرنامج الذي يوضح مقارنة بين التكرارات العشرة الأولى لجميع الخوارزميات 7 التي تم تنفيذها. يعرض القسم الأول الوسائط التي تم تمريرها إلى ComputePi (مع معلومات استخدام وقت التشغيل والذاكرة) ، ويعرض القسم الثاني جدولًا مع عدد الأرقام الرائدة الدقيقة لـ PI لكل تكرار.
GREGORY_LEIBNIZ 10 2000 --print_steps --compare_values --estimate_memory_usage 0.103 seconds 1.640 KB
NILAKANTHA 10 2000 --print_steps --compare_values --estimate_memory_usage 0.027 seconds 1.652 KB
NEWTON 10 2000 --print_steps --compare_values --estimate_memory_usage 0.096 seconds 3.263 KB
VIETE 10 2000 --print_steps --compare_values --estimate_memory_usage 0.395 seconds 10.548 KB
WALLIS 10 2000 --print_steps --compare_values --estimate_memory_usage 0.017 seconds 1.647 KB
CHUDNOVSKY 10 2000 --print_steps --compare_values --estimate_memory_usage 0.133 seconds 13.305 KB
BRENT_SALAMIN 10 2000 --print_steps --compare_values --estimate_memory_usage 0.331 seconds 11.368 KB
| التكرارات | Gregory_Leibniz | نيلاكانثا | نيوتن | فييت | واليس | Chudnovsky | Brent_Salamin |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 1 | 0 | 0 | 14 | 0 |
| 2 | 1 | 2 | 3 | 1 | 0 | 28 | 3 |
| 3 | 0 | 3 | 3 | 2 | 0 | 42 | 8 |
| 4 | 1 | 2 | 4 | 2 | 0 | 56 | 19 |
| 5 | 0 | 3 | 4 | 3 | 1 | 70 | 41 |
| 6 | 1 | 3 | 6 | 4 | 1 | 85 | 84 |
| 7 | 1 | 3 | 6 | 5 | 1 | 99 | 171 |
| 8 | 1 | 4 | 7 | 5 | 1 | 113 | 345 |
| 9 | 1 | 4 | 8 | 5 | 1 | 127 | 694 |
| 10 | 1 | 4 | 9 | 6 | 1 | 142 | 1392 |