سؤال

أحاول تحديد مقارب تشغيل مرة واحدة من الخوارزميات التي تستخدم الدعاة ، ولكن لست متأكدا من كيفية الدعاة تحسب برمجيا.

أنا على وجه التحديد تبحث عن الأسرى() الخوارزمية المستخدمة في الدقة المزدوجة, أرقام النقطة العائمة.

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

المحلول

ولقد سنحت لي الفرصة للنظر في تنفيذ fdlibm ل. تعليقات تصف الخوارزمية المستخدمة:

 *                    n
 * Method:  Let x =  2   * (1+f)
 *      1. Compute and return log2(x) in two pieces:
 *              log2(x) = w1 + w2,
 *         where w1 has 53-24 = 29 bit trailing zeros.
 *      2. Perform y*log2(x) = n+y' by simulating muti-precision
 *         arithmetic, where |y'|<=0.5.
 *      3. Return x**y = 2**n*exp(y'*log2)

وتليها قائمة بجميع الحالات الخاصة بمعالجة (0، 1، الوقود النووي المشع، نان).

والمقاطع الأكثر كثافة من القانون، بعد كل معالجة حالة خاصة، تنطوي على log2 و2** الحسابات. وليس هناك حلقات في أي من هذين. لذا، فإن تعقيد البدائيون الفاصلة العائمة الرغم من ذلك، يبدو وكأنه خوارزمية وقت ثابت مقارب.

وخبراء الفاصلة العائمة (التي أنا لست واحدا) هي موضع ترحيب للتعليق. : -)

نصائح أخرى

إلا أنها اكتشفت طريقة أفضل للقيام بذلك ، وأعتقد أن قيم تقريبية عن علم حساب المثلثات ، لوغاريتمي والأسي الوظائف (على المتسارع النمو والاضمحلال ، على سبيل المثال) عموما حسابها باستخدام الحساب القواعد ، سلسلة تايلور التوسعات لإنتاج تقريبي نتيجة دقيقة إلى داخل المطلوب من الدقة.(انظر أي كتاب حساب التفاضل والتكامل لمزيد من التفاصيل على السلطة سلسلة, سلسلة تايلور ، Maclaurin سلسلة من التوسعات وظائف.) يرجى ملاحظة أنه مرت فترة منذ أن فعلت أي شيء من هذا لذلك أنا لا يمكن أن أقول لك ، على سبيل المثال ، بالضبط كيفية حساب عدد من الشروط في سلسلة تحتاج إلى تضمين ضمان خطأ صغيرة بما يكفي أن تذكر في الدقة مزدوج الحساب.

على سبيل المثال, Taylor/Maclaurin سلسلة التوسع e^x هو:

      +inf [ x^k ]           x^2    x^3      x^4        x^5
e^x = SUM  [ --- ] = 1 + x + --- + ----- + ------- + --------- + ....
      k=0  [  k! ]           2*1   3*2*1   4*3*2*1   5*4*3*2*1

إذا كنت تأخذ كل شيء من حيث (k من 0 إلى اللانهاية) ، وهذا التوسع هو الدقيق الكامل (أي خطأ).

ومع ذلك, إذا كنت لا تأخذ كل الشروط ذاهب إلى ما لا نهاية ، ولكن توقف بعد 5 شروط أو 50 شروط أو أيا كان ، تنتج التقريبية النتيجة التي تختلف عن الفعلية e^x دالة القيمة المتبقية والتي من السهل إلى حد ما إلى حساب.

والخبر السار بالنسبة exponentials هو أنه يتقاطع بشكل جيد و شروط متعدد الحدود التوسع إلى حد ما من السهل رمز تكرارا ، لذا قد (أكرر ، قد - تذكر انها كانت فترة من الوقت) لا تحتاج حتى إلى ما قبل حساب كم حيث تحتاج لضمان الخطأ هو أقل من الدقة لأنه يمكنك اختبار حجم مساهمة في كل التكرار و تتوقف عندما يصبح قريبة بما فيه الكفاية إلى الصفر.في الواقع, أنا لا أعرف إذا كان هذا هو استراتيجية قابلة للتطبيق أم لا - يجب أن تحاول ذلك.هناك تفاصيل مهمة لدي منذ فترة طويلة نسي.أشياء مثل:الدقة آلة, آلة خطأ و خطأ التقريب ، إلخ.

كما يرجى ملاحظة أنه إذا كنت لا تستخدم e^x, ولكن كنت تفعل النمو/الاضمحلال مع قاعدة أخرى مثل 2^x أو 10^س ، تقارب وظيفة متعدد الحدود التغييرات.

والنهج المعتاد، ليثير لب، لالأس صحيحا، غني عن شيء مثل هذا:

result = 1
while b > 0
  if b is odd
    result *= a
    b -= 1
  b /= 2
  a = a * a

ومن وغاريتمي عموما في حجم الأس. ويستند الخوارزمية على ثابتة "ل^ ب * النتيجة = A0 ^ B0"، حيث A0 وB0 هي القيم الأولية من أ و ب.

لالأسس السالبة أو غير صحيحة، اللوغاريتمات وتقريبية والتحليل العددي والحاجة. إدارة الوقت سوف تعتمد على الخوارزمية المستخدمة وما الدقة يتم ضبطها المكتبة ل.

وتحرير: منذ يبدو أن هناك بعض الاهتمام، وهنا نسخة دون تكاثر اضافية

result = 1
while b > 0
  while b is even
    a = a * a
    b = b / 2
  result = result * a
  b = b - 1

إذا كنت أنا وكتابة وظيفة الأسرى تستهدف إنتل، سوف أعود exp2 (log2 (خ) * ص). الرمز الصغير إنتل للlog2 هو بالتأكيد أسرع من أي شيء سأكون قادرا على الرمز، حتى لو كان يمكن أن أتذكر أول حساب التفاضل والتكامل العام، والتحليل العددي المدرسة غراد.

ويمكنك استخدام إكسب (ن * قانون الجنسية (خ)) لحساب س <سوب> ن . كلا x و ن يمكن أن يكون الدقة المزدوجة، أرقام النقطة العائمة. ويمكن حساب اللوغاريتم الطبيعي والدالة الأسية باستخدام سلسلة تايلور. هنا يمكنك أن تجد الصيغ: http://en.wikipedia.org/wiki/Taylor_series

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