ماذا العائمة خطأ نقطة -1 # J يعني؟
-
20-08-2019 - |
سؤال
ومؤخرا، في بعض الأحيان (نادرا) عندما كنا تصدير البيانات من تطبيق لدينا، سجل تصدير يحتوي على قيم التعويم التي تبدو وكأنها "-1 # J". لم أكن قادرا على إعادة إنتاجه لذلك أنا لا أعرف ما يبدو تعويم مثل في ثنائي، أو كيف برنامج Visual Studio يعرضها.
وحاولت النظر إلى شفرة المصدر لprintf، لكنها لم تجد أي شيء (لست متأكدا 100٪ نظرت إلى الإصدار الصحيح على الرغم من ...).
ولقد حاولت غوغلينغ لكن جوجل يلقي بعيدا أي #، على ما يبدو. وأنا لا يمكن العثور على أي قوائم أخطاء تعويم.
المحلول
ويمكن أن تكون إما اللانهاية السالبة أو نان (ليس عدد). ويرجع ذلك إلى التنسيق على printf المجال لا يفرق بينهما.
وحاولت التعليمات البرمجية التالية في Visual Studio 2008:
double a = 0.0;
printf("%.3g\n", 1.0 / a); // +inf
printf("%.3g\n", -1.0 / a); // -inf
printf("%.3g\n", a / a); // NaN
والذي ينتج الإخراج التالية:
1.#J
-1.#J
-1.#J
وإزالة محدد 0.3 التنسيق يعطي:
1.#INF
-1.#INF
-1.#IND
وهكذا فمن الواضح 0/0 يعطي نان و-1/0 يعطي اللانهاية السالبة (نان، -inf و+ الوقود النووي المشع هي "خاطئة" عائم أرقام النقطة الوحيدة، لم تخني الذاكرة)