سؤال

أحاول أن أفهم عندما يسبب الصب فقدان البيانات وكيف تعمل. لذلك بالنسبة للأمثلة التالية ، أحاول أن أفهم ما إذا كان هناك فقدان للبيانات وإذا كانت الإجابة بنعم لماذا: ((i - int(4),f - float(4),d-double(8))

i == (int)(float) i; // sizeof(int)==sizeof(float) <- no loss
i == (int)(double) i; // sizeof(int)!=sizeof(double) <- possible loss
f == (float)(double) f;// sizeof(double)!=sizeof(float) <- possible loss
d == (float) d;// sizeof(double)!=sizeof(float) <- possible loss

هل يكفي أن تبني الإجابة فقط على أحجام النوع؟ (+ جولة)

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

المحلول

بافتراض 32 بت ints و 4 و 8 بايت IEEE-754 تعويم/الزوجي سيكون:

i == (int)(float) i;     // possible loss (32 -> 23 -> 32 bits)
i == (int)(double) i;    // no loss (32 -> 52 -> 32 bits)
f == (float)(double) f;  // no loss (23 -> 52 -> 23 bits)
d == (float) d;          // possible loss (52 -> 23 -> 52 bits)

لاحظ أن INT لديها 32 بت من الدقة ، وتطفو على 23 بت ، مزدوج لديه 52.

نصائح أخرى

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

بسبب ال sizeof التقارير بنفس الحجم في الذاكرة لا يعني وجود فقدان البيانات.

النظر في 0.5.

يمكن تخزين ذلك في تعويم ولكن لا يمكن تخزينه في عدد صحيح.

لذلك فقدان البيانات.

أي أريد 0.5 من تلك الكعكة. لا يمكن أن تمثل ذلك كصبع عدد صحيح. إما الحصول على شيء أو الكثير من الكعك. نعم

لماذا عدد صحيح؟ لأنك قد تحتاج فقط إلى أرقام عدد صحيح على سبيل المثال ID_num

لماذا تعويم؟ لأنك قد تحتاج إلى العمل على مثال أرقام حقيقية % calculations

لماذا ضعف؟ عندما يكون لديك أرقام حقيقية لا يمكن أن تتناسب مع حجم التعويم

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