نفّذ نوع Decimal بدقة اعتباطية.
أعداد الفاصلة العائمة هي التمثيل الأكثر شيوعًا للأعداد الحقيقية غير الصحيحة في الحوسبة، وهي معيار شائع تحدده IEEE 754. إنها مرنة ومتعددة الاستخدامات، لكن لها بعض القيود. ومن المشهور في الحساب بالفاصلة العائمة أن 0.1 + 0.2 != 0.3.
حل هذه المشكلة هو إيجاد طريقة أخرى لا تفقد الدقة لتمثيل الأعداد الحقيقية غير الصحيحة ذات الدقة الاعتباطية. قد تكون هذه الطريقة أقل كفاءة من حيث الذاكرة أو سرعة المعالجة مقارنةً بأعداد الفاصلة العائمة؛ فالهدف هو تقديم نتائج دقيقة.
على الرغم من أن Decimal نوع مخصص، ينبغي أن نتمكن من التعامل معه كعدد: يجب أن تعمل العوامل == و< و> و+ و- و* كما هو متوقع على قيم Decimal. وللتسهيل، لا يُطلب منك تنفيذ القسمة، لأن القسمة ذات الدقة الاعتباطية يمكن أن تخرج عن السيطرة بسرعة كبيرة. (كيف تمثّل 1/3 بدقة اعتباطية؟)
في Rust، الطريقة للحصول على هذه العمليات على الأنواع المخصصة هي تنفيذ الـ traits المناسبة لها. وعلى وجه الخصوص، ستحتاج إلى تنفيذ PartialEq وPartialOrd وAdd وSub وMul على الأقل. وبالمعنى الدقيق، بما أن الأعداد العشرية تشكّل ترتيبًا كليًا، ينبغي أيضًا تنفيذ Eq وOrd، مع أن هذه الاختبارات لا تتحقق من هذين الـ traits.
سيكون من السهل جدًا تنفيذ هذا التمرين باستخدام الـ crate المسمّى bigdecimal. لا تفعل ذلك؛ نفّذ هذا بنفسك.
سجّل في Exercism لتتعلّم وتتقن Rust عبر 99 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.