هل يؤثر الترميز العلمي على دقة بيرل؟
سؤال
واجهت سلوك غريب في بيرل. يجب أن ينتج عن الطرح التالي صفرًا كنتيجة (وهو ما يفعله في بيثون):
print 7.6178E-01 - 0.76178
-1.11022302462516e-16
لماذا يحدث وكيفية تجنب ذلك؟
يظهر تأثير PS على "v5.10.0 تم تصميمه لـ x86_64-linux-gnu-thread-multi" (Ubuntu 9.04) و "v5.8.9 تم تصميمه لـ Darwin-2Level" (Mac OS 10.6)
المحلول
ليس الأمر أن التدوين العلمي يؤثر على الدقة بقدر ما يؤثر حدود التدوين العائم الذي تم تمثيله في الثنائي. انظر الإجابات على perlfaq4. هذه مشكلة لأي لغة تعتمد على الهندسة المعمارية الأساسية لتخزين الأرقام.
- لماذا أحصل على عشرية طويلة (على سبيل المثال ، 19.9499999999999) بدلاً من الأرقام التي يجب أن أحصل عليها (على سبيل المثال ، 19.95)؟
- لماذا يتم كسر int ()؟
إذا كنت بحاجة إلى معالجة أفضل للأرقام ، تحقق من bignum براغما.
لا تنتمي إلى StackOverflow