قليلا تحويلها إلى النقطة العائمة (im)الدقة ، الجزء 1

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

سؤال

معظم الرياضيين نتفق على أن:

هـني + 1 = 0

ومع ذلك ، فإن معظم النقطة العائمة تطبيقات نختلف.كيف يمكننا تسوية هذا النزاع ؟

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

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

المحلول

غير أن معظم النقطة العائمة تطبيقات نختلف, انها مجرد أنهم لا يستطيعون الحصول على دقة الضروري الحصول على 100% من الإجابة.و الجواب الصحيح هو أنهم لا يستطيعون.

PI هو لانهائي سلسلة من الأرقام التي لم يتمكن أحد من دلالة قبل أي شيء آخر غير تمثيل رمزي ، e^X هو نفسه ، وبالتالي فإن الطريقة الوحيدة للوصول إلى 100% دقة هو أن يذهب رمزية.

نصائح أخرى

هنا قائمة قصيرة من التطبيقات واللغات لقد حاولت.انها مرتبة حسب قربه من الصفر:

  • مخطط: (+ 1 (make-polar 1 (atan 0 -1)))
    • 0.0+1.2246063538223773e-16i (Chez مخطط MIT مخطط)
    • 0.0+1.22460635382238e-16i (المكر)
    • 0.0+1.22464679914735e-16i (الدجاج مع numbers البيض)
    • 0.0+1.2246467991473532e-16i (MzScheme ، هيئة رقابة التأمين, جوش, المناورة)
    • 0.0+1.2246467991473533e-16i (SCM)
  • Common Lisp: (1+ (exp (complex 0 pi)))
    • #C(0.0L0 -5.0165576136843360246L-20) (CLISP)
    • #C(0.0d0 1.2246063538223773d-16) (CMUCL)
    • #C(0.0d0 1.2246467991473532d-16) (SBCL)
  • بيرل: use Math::Complex; Math::Complex->emake(1, pi) + 1
    • 1.22464679914735e-16i
  • بايثون: from cmath import exp, pi; exp(complex(0, pi)) + 1
    • 1.2246467991473532e-16j (CPython)
  • روبي: require 'complex'; Complex::polar(1, Math::PI) + 1
    • Complex(0.0, 1.22464679914735e-16) (التصوير بالرنين المغناطيسي)
    • Complex(0.0, 1.2246467991473532e-16) (JRuby)
  • R: complex(argument = pi) + 1
    • 0+1.224606353822377e-16i

هل من الممكن أن تسوية هذا النزاع ؟

فكرتي الأولى هي أن ننظر إلى لغة رمزية ، مثل القيقب.لا أعتقد أن هذا يعد بمثابة النقطة العائمة على الرغم من.

في الواقع, كيف تمثل أنا (أو ي للمهندسين) في البرمجة التقليدية اللغة ؟

ولعل أفضل مثال على ذلك هو الخطيئة(π) = 0?(أو قد فاتتني هذه النقطة مرة أخرى؟)

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

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

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

@ريان فوكس

في الواقع, كيف تمثل الأول (أو ي للمهندسين) في البرمجة التقليدية اللغة ؟

الأم أنواع البيانات المعقدة بكثير من المجهول.Fortran كان قبل منتصف الستينات ، المرجع المعروضات مجموعة متنوعة من اللغات الأخرى المساندة لها في hist المتابعة.

و الأعداد المركبة يمكن إضافة لغات أخرى مثل المكتبات (مع المشغل الحمولة الزائدة حتى أنها تبدو تماما مثل الأصلي الأنواع في القانون).

ولكن إلا إذا توفر حالة خاصة لهذه المشكلة "عدم الاتفاق" هو مجرد تعبير غير دقيق آلة الحساب ؟ انها مثل تشكو

float r = 2/3;
float s = 3*r;
float t = s - 2;

ينتهي مع (t != 0) (على الأقل إذا كنت غبية بما يكفي مترجم)...

كان looooong القهوة الأحاديث مع زميلي الأفضل الحديث عن ارقام غير منطقيه و الفرق بين الأرقام الأخرى.حسنا كلانا نتفق في هذه وجهة نظر مختلفة:

غير منطقي الأرقام العلاقات الوظائف بطريقة ما الطريقة ؟ فكر "إذا كنت تريد دائرة الكمال ، أعطني المثالي pi" ، ولكن الدوائر diferent إلى شخصيات أخرى (4 الجانبين, 5, 6...100, 200) ولكن...كم من الجانبين هل لديك مثل دائرة يبدو.إذا اتبعت لي حتى الآن ، وربط جميع هذه الأفكار هنا هو pi الصيغة:enter image description here

لذا pi هي وظيفة, ولكن واحدة التي لا تنتهي!بسبب ∞ المعلمة ، ولكن أود أن أعتقد أنه يمكن أن يكون "سبيل المثال" بي إذا قمت بتغيير ∞ المعلمة كبير جدا Int, سيكون لديك مجموعة كبيرة جدا pi سبيل المثال.

نفسه مع ه ، أعطني ضخمة المعلمة, سوف أعطيك ضخمة هـ.

وضع جميع الأفكار معا:

كما لدينا قيود الذاكرة و اللغة يبس توفر لنا ضخمة سبيل المثال ارقام غير منطقيه, في هذه الحالة, pi, e, كما النتيجة النهائية سيكون لديك طويلة aproach للحصول على 0 ، مثل الأمثلة التي يقدمها @كريس مهرج-الشباب

في الواقع, كيف تمثل الأول (أو ي للمهندسين) في البرمجة التقليدية اللغة ؟

في اللغة التي لا تملك الأم التمثيل ، وعادة ما يتم إضافته باستخدام OOP لإنشاء Complex فئة تمثل i و j, مع عامل الحمولة الزائدة في التعامل بشكل صحيح مع العمليات التي تنطوي الأخرى Complex أرقام أو رقم آخر الأوليات الأصلي إلى اللغة.

على سبيل المثال: Complex.java, C++ < مجمع >

التحليل العددي يعلمنا أنه لا يمكن الاعتماد على دقة قيمة الفروق الصغيرة بين أعداد كبيرة.

وهذا لا يؤثر فقط على المعادلة في السؤال هنا, ولكن يمكن أن تجلب الاستقرار إلى كل من حل شبه المفرد مجموعة من المعادلات الآنية من خلال إيجاد الأصفار من متعددو الحدود ، إلى تقييم سجل(~1) أو exp(~0) (حتى رأيت وظائف خاصة لتقييم log(x+1) و (exp(x)-1) للحصول على هذا الدور).

وأود أن أشجعكم على عدم التفكير في التصفير الفرق -- أنت لا تستطيع-بل في القيام الحسابات المرتبطة في مثل هذه الطريقة لضمان الحد الأدنى من الخطأ.

أنا آسف إنه 43 عاما منذ حصلت على هذه نغمة في لي في الجامعة, و حتى إذا كان بإمكاني تذكر المراجع, أنا متأكد من أن هناك أشياء أفضل في جميع أنحاء الآن.أقترح هذا كنقطة انطلاق.


إذا كان هذا يبدو قليلا رعايته, أعتذر.بلدي "التحليل العددي 101" كان جزءا من مادة الكيمياء ، كما لم يكن هناك الكثير CS في تلك الأيام.ليس لدي شعور المكان/أهمية التحليل العددي في حديث CS الحال.

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

لحسن الحظ كامل اللغات والمكتبات يمكن أن تكون مخصصة الدقة الدوال المثلثية باستخدام الترميزية المفاهيم (مماثلة لتلك التي وصفها لاسي V.Karlsen ).

النظر في مكتبة/اللغة التي توضح المفاهيم مثل e و بي في شكل آلة يمكن أن نفهم.هل الجهاز لديك أي فكرة عما دائرة الكمال ؟ ربما لا, لكننا يمكن إنشاء كائن - دائرة يرضي جميع الميزات التي نعلقها على ذلك (نصف قطرها ثابت, العلاقة من دائرة نصف قطرها إلى محيط 2*pi*r = C).كائن مثل بي هو فقط وصفها النسبة المذكورة.r & C يمكن أن تكون رقمية الكائنات التي وصفها مهما الدقة كنت تريد أن تعطي لهم.e يمكن تعريف "كما ه هي فريدة من نوعها عدد حقيقي مثل أن قيمة المشتقة (المنحدر من خط المماس) الدالة f(x) = ex عند النقطة x = 0 هو بالضبط 1" من ويكيبيديا.

متعة السؤال.

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