ج:كم من الوقت يمكن أن يكون مزدوجًا عند الطباعة من خلال printf ()

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

  •  06-07-2019
  •  | 
  •  

سؤال

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

ما هو الحد الأقصى للطول الذي يمكن أن يكون له دقة مزدوجة مكونة من 6 أرقام عند تنسيقها بواسطة printf()؟

على وجه التحديد، ما هي القيمة التي يجب أن أعطيها لـ X printf("%X.6lg",doubleValue); لضمان عدم اقتطاع أي قيمة؟

السبب الذي يجعلني بحاجة إلى أن أكون محددًا بشأن الطول هو أنني أقوم بتعريف نوع بيانات مشتق من MPI يتكون من الكثير من تمثيلات السلسلة ذات القيم المزدوجة ويجب أن أعرف طولها الدقيق لتقسيم مناطق الملف بين عمليات MPI.

آمل أن يكون هذا واضحا.شكرا مقدما على الإجابة.

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

المحلول

يستخدم printf("%.6g", doubleValue) أو printf("%.6Lg", doubleValue)

لاحظ أن ترك الأرقام البادئة ("العرض") في محدد الدقة لا يتطلب أي متطلبات على طول الجزء المتكامل من القيمة.

لاحظ أيضًا أن الحرف السفلي "l" سيحدد أن القيمة الخاصة بك هي int طويلة.يحدد الحرف الكبير "L" قيمة مزدوجة طويلة.

لاحظ أيضًا أنه إذا كنت لا تريد تغيير ذلك إلى تدوين علمي (إذا كان تمثيلًا أقصر)، فيمكنك استخدام "f" بدلاً من "g".

انظر أ مرجع printf هنا.

نصائح أخرى

والأس الحد الأقصى لIEEE المزدوج هو 1023، وذلك أكبر المزدوج سيكون 1 + 1/2 + 04/01 + 08/01 + ... الخ * 2 ^ 1023. الذي سيكون حوالي 318 حرفا، بالتدوين العشري.

لماذا لا تستخدم "البريد" شكل محدد؟

يوجد < float.h > يحتوي على العديد من القيم المفيدة، من بينها DECIMAL_DIG، وهو لـ a مزدوج طويل لكن.

من المرجح أن يخبرك نفس الملف بأن ملف مزدوج يحتوي النظام الأساسي الخاص بك على أكثر من 6 أرقام من الدقة...

ملاحظة: لاحظ أيضًا إجابة ديمي أعلاه.لقد أشار إلى العيوب المختلفة في printf() التي أفلتت مني.

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