سؤال

أبحث عن طريقة تلقائية لتحويل قيمة عشرية إلى جزء صغير في حاسبة Pari / GP (GP). على سبيل المثال، أريد أن أدر 0.759765625 إلى 389/512. أعلم أنني أستطيع أن أفعل هذا يدويا عن طريق الكتابة في "759765625/10 ^ 9"، ولكني أحب طريقة أسهل، مثل "ترشيد (0.759765625)؛ سوف تعمل في ماكسيما.

إذا لم تتمكن من القيام بذلك مباشرة، فربما تكون هناك وظيفة لحساب عدد الأماكن العشرية؟ ثم يمكنني جمع 10 نتيجة لهذه الوظيفة. (سيتعين على الوظيفة أن تحسب المرمئات العشرية الرائدة من 0 ثانية لتكون مفيدة.)

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

المحلول

في PARI-2.5، يمكنك استخدام BestProw (x) مباشرة، دون تحديد حجة عدد مرات إضافية من الأرقام. سوف تستخدم جميع الأرقام المتاحة داخليا:

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752

نصائح أخرى

استخدام وظيفة أفضل ()؛ على سبيل المثال المعطى، استخدم BestProp (0.759765625،10 ^ 9). (أجب بإذن من القائمة البريدية البارتي / GP.)

لا يزال هذا هو العيب على أنه يجب تحديد عدد الأرقام العشرية يدويا، ولكن يمكن التغلب عليها: المعلمة الثانية إلى BestProom () يمكن أن تكون قوة كبيرة جدا من 10، أكبر من أطول عشري ستتحتاج إلى " ترشيد ".

تحذير: تأكد من تعيين الدقة عالية بما يكفي قبل الاتصال بصدق، باستخدام الأمر p.

طريقتان رائعان للقيام بذلك:

أ) استخدام lindep:

x=Pi;digits=7;l=lindep([x,1],digits);-l[2]/l[1]

ب) استخدام الكسور المستمرة عن طريق التوقف كلما تمت مصادفة حاصل جزئي كبير (أدناه، قمت بإصلاح الحد إلى 1000):

x=Pi;maxquot=1000;p0=0;p1=1;q0=1;q1=0;a=floor(x);while(a<maxquot,p2=a*p1+p0;q2=a*q1+q0;p0=p1;p1=p2;q0=q1;q1=q2;x=1/frac(x);a=floor(x));p1/q1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top