سؤال

أود استخدام صيغة BBP لحساب PI في عملية PTHREAD لبرنامج C أثناء طباعة عملية أخرى النتيجة بقدر ما حصلت عليها.ومع ذلك، فإن BBP يعطي قاعدة 16 إجابة بينما أرغب في دفق قاعدة 10 إجابة على المستخدم.

كيف يمكنني تحديد ما إذا كان من الآمن طباعة رقم N-Ther of A Base 10 Concoed Base 16؟

شكرا مقدما!

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

المحلول

حل واحد هو اختبار ما إذا كان زيادة عدد السددي العشري المتاح حاليا يتغير حاليا الرقم العشري الذي تفكر فيه العرض.

النظر في عدد X مع التمثيل السداسي عشري ... H 3 H 2 H 1 H 0 .h < Sub> -1 H -2 ... والتمثيل العشري ... D 3 D 2 D 1 D 0 .d -1 d -2 ...

لنفترض أن لدينا رقما مقطوعا، حتى نعرف فقط الأرقام من H إلى H J . دع Y يكون الرقم الذي يمثله هذه الأرقام. دع Z يكون y + 16 j ، وهو y plus واحد في موضع رقم J. ثم قد تكون قيمة X أي قيمة من y (شاملة) إلى Z (حصرية).

فكر الآن في مرشح رقم عشري، مع أرقام D إلى D i . دع Y 'يكون الرقم الذي يمثله هذه الأرقام. دع Z 'كن y + 10 i . IFF Y 'y و y و z ≤ ≤ ≤'، ثم يجب أن تكون الأرقام العشرية D إلى d i بادئة للأرقام العشرية كاملة ل x (أي، هذه من المعروف أن الأرقام العشرية تظهر في الأرقام العشرية ل X؛ لن يتغيروا مع اكتشاف المزيد من الأرقام السكاسية).

هذا لأن قيمة x، يجري في [y، z)، يمكن تشكيلها عن طريق إضافة بعض القيمة الصفرية أو الإيجابية إلى y 'وتلك القيمة المطلوبة هي أقل من 1 في موضع رقم I. على العكس من ذلك، إذا لم تعقد عدم المساواة، فيمكن أن يكون x خارج الفاصل الزمني الذي تمامه بواسطة أرقام المرشحين.

نصائح أخرى

@ @ postpischil نشر خوارزمية غرامة للأغراض العامة.

في تنفيذ هدف المرجع، قد تتحقق بعض التخفيضات القصيرة.
التعامل مع الجزء عدد صحيح من PI منفصلة والتعامل فقط مع الكسر.
افترض الإدخال قاعدة 16 ثم أضف 1 بت في وقت واحد.

ملاحظات التنفيذ:
لقد خدعت باستخدام معالجة تخصيص الذاكرة الثابتة و BYTE-Array (String).من المؤكد أن واحد من شأنه أن يوفر طول الصفيف بدلا من strlen() واستخدام البايت 0 - 9 بدلا من char '0' إلى '9'، ولكن تم إلقاء ذلك معا بسرعة وكان من الأسهل تصحيح هذه الطريقة.حجم مجموعة S / B الديناميكية، ولكن هذا سهل الإضافة.

giveacodicetagpre.

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