الحوسبة π إلى الدقة الثنائية "لانهائية" في C #

StackOverflow https://stackoverflow.com/questions/1524057

  •  19-09-2019
  •  | 
  •  

سؤال

يبدو أن معادلة Fabrice Bellard's Base 2 هي الطريق للذهاب

alt text

ومن المفارقات أن هذا سوف يتطلب نوع bigreal؛ هل لدينا هذا ل .NET؟ .NET 4.0 لديه bigintereger.

أي شخص لديه نسخة haskell؟

هل كانت مفيدة؟

المحلول

منذ أن تسأل عن نسخة Haskell، هنا ورقة بواسطة Jerzy Karczmarczuk، ودعا "الطريقة الأكثر غير موثوق بها في العالم لحساب π":

هذه الورقة هي تمارين غير نمطية في الترميز الوظيفي الكسول، مكتوب للمتعة والتعليمات. يمكن قراءة وفهم من قبل أي شخص يفهم لغة البرمجة Haskell. نعرض كيفية تنفيذ صيغة Bailey-Borwein-Ploue ل π بطريقة متكررة مشتركة تنتج الأرقام 3، 1، 4، 1، 5، 9.. وبعد حتى استنفاد الذاكرة. هذه ليست وسيلة للمضي قدما إذا كان شخص ما يحتاج إلى العديد من الأرقام! استراتيجية الترميز لدينا هي منحرف وخطير، وتظل تنهار. يعتمد على الحساب على نطاق التسلسلات اللانهائية للأرقام التي تمثل الكسور المناسبة الموسعة في قاعدة عدد صحيح. نوضح كيفية التعامل معها: إضافة، مضاعفة بواسطة عدد صحيح، إلخ. مثل هذه التسلسلات من اليسار إلى Infinitum الإعلاني الصحيح، والتي من الواضح أنها لا تستطيع العمل في جميع الحالات بسبب الغموض. تتم مناقشة بعض العواقب الفلسفية العميقة في الاستنتاجات.

لا يحل المشكلة حقا بطريقة فعالة أو عملية للغاية، ولكنها مسلية وتظهر بعض المشاكل في الحساب الدقيق اللانهائي الكسول.

ثم هناك أيضا هذه الورقة من جيريمي جيبونز.

نصائح أخرى

إلى حد بعيد بلدي حنفية haskell المفضلة ل PI يأتي من جيريمي جيبونز:

pi = g(1,0,1,1,3,3) where
    g(q,r,t,k,n,l) = 
        if 4*q+r-t<n*t
        then n : g(10*q,10*(r-n*t),t,k,div(10*(3*q+r))t-10*n,l)
        else g(q*k,(2*q+r)*l,t*l,k+1,div(q*(7*k+2)+r*l)(t*l),l+2)

الخلفية الرياضية التي تبرر هذا التنفيذ يمكن العثور عليها في:

خوارزمية حنفية لأرقام PI

تفاصيل ويكيبيديا الكثير من الطرق للحصول على تقريب عددي من PI هنا. وبعد كما أنها تعطي بعض عينة رمز الزائفة

تحرير: إذا كنت مهتما بهذا النوع من المشكلات الرياضية دون وجود أي مشكلة في العالم الحقيقي ذات الصلة لحلها (وهذا بالتأكيد حسن الخبرة، IMHO)، يمكنك زيارة صفحة مشروع Euler

يوجد مثل هذه الإمكالية لمعالجة الأرقام العقلانية الكبيرة في DLR.اللغات الديناميكية المعدية (على سبيل المثال ironpython.). أو يمكنك استخدام أي تطبيق C / C ++ محمول للأرقام الحقيقية الكبيرة P / invoke..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top