سؤال

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

2.159 * 3.507 --> 2159 * 3507 = 7571613
  ^^^     ^^^
  123     456

6 decimals in total... 7571613 -> 7.571613
                        ^^^^^^
                        654321

لذلك 2.159 * 3.507 = 7.571613

لماذا لا تستطيع العمل فقط هكذا؟

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

المحلول

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

كنت تتضاعف 2.159 * 3.507, ، ولكن في الواقع 2.159 يتم تخزينه كما 2159 * 10^-3 و 3.507 يتم تخزينه كما 3507 * 10^-3. وبعد منذ أن نعمل على نظام عشري مقرها، 10 يفترض، لذلك نحن فقط يجب أن تخزن فقط -3 بدون ال 10, ، مثله: 2159,-3 أو 3507,-3. وبعد ال -3 هو موقع "النقطة العائمة": حيث تركت نقطة التحركات نقطة العائمة (.3507 يتم تخزينه كما 3507,-4) وكما ينتقل النقطة اليمنى الزيادات الفاصلة العائمة (35.07 يتم تخزينه كما 3507,-2).

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

2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6

7571613,-6 انه ببساطة 7571613 * 10^-6 (تذكر أننا يمكن أن نفترض 10 لأننا نعمل على كمبيوتر عشري) وهو نفسه 7.571613.

بالطبع، لا يجب أن تكون النقطة العائمة -3, ، يمكن أن يكون أي شيء يناسب التخزين:

21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613

وبالطبع، فإن معظم أجهزة الكمبيوتر لا تخزن الأشياء في عشري، لذلك ستكون الأرقام الفعلية كلها في ثنائي، والنقطة العائمة ستكون مثل 2^-9 -> -9 بدلا من 10^-3 -> -3. وبعد لكن انت فهمت الفكرة.

نصائح أخرى

هذا يسمي "حساب ثابت" الناس تفعل ذلك دائما.

يرى http://gameprogmer.com/4-fixed.html.

هناك عدد قليل من تطبيقات الحساب الثابت نقطة ثابتة. ومع ذلك، فإننا غالبا ما نفد من الأماكن العشرية بسرعة كبيرة جدا مع تخزين نقطة ثابتة. إنها مثالية للمعاملات النقدية، حيث نعرف أننا لن نخزن / رعاية أي أرقام غير عقلانية.

بالإضافة إلى ذلك، بالنسبة للكثير من الأشياء الأخرى، لا يستحق الحساب الحسابي النقاط الثابتة. النقطة العائمة هي أسرع بكثير.

أشياء للقراءة:

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