سؤال

وفق ويكيبيديا عند تقريب رقم سالب، فإنك تقوم بتقريب الرقم المطلق.وبهذا المنطق، سيتم تقريب -3.5 إلى -4.ولكن عندما أستخدم java.lang.Math.round(-3.5) يُرجع -3.هل من أحد يفسر لي هذا؟

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

المحلول

بحسب ال javadoc

يعيد أقرب وقت طويل إلى الحجة.يتم تقريب النتيجة إلى عدد صحيح عن طريق إضافة 1/2 ، وأخذ أرضية النتيجة ، ويلقي النتيجة للكتابة طويلة.بمعنى آخر ، والنتيجة تساوي قيمة التعبير:

(long)Math.floor(a + 0.5d)

من الناحية النظرية، أنت مستدير أعلى.وبعبارة أخرى، إلى العدد الصحيح التالي أكبر من القيمة و-3 أكبر من -3.5، بينما -4 أقل.

نصائح أخرى

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

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

وأدوات مختلفة ولغات المحتمل أن تستخدم مخططات التقريب مختلفة. على ما يبدو يستخدم Excel طريقة متماثل.

(وعموما، أنصح أنه إذا وجدت صراع بين يكيبيديا والخبرة، يمكنك البحث عن المعلومات في أي مكان آخر. ويكيبيديا ليست مثالية.)

لما يستحق، java.math.BigDecimal لديها وسائل التقريب اختيار اذا كنت بحاجة الى مزيد من السيطرة على هذا النوع من الشيء.

وومقالة ويكيبيديا الذي استشهد لا يقول ان هذه هي الطريقة الوحيدة لجولة، مجرد وسيلة شائعة لجولة. كما ذكر في هذا المقال عدة بدائل (للأسف ليس من بينها وصف أسلوب التقريب جاوة - على الرغم من يسمونه بها باعتبارها "غير المتماثلة الحساب التقريب" عندما يشير إلى ما تقوم جافا سكريبت)

.

وعليك أن تقرر كيف <م> تريد الأرقام الخاصة بك اعتقلت، ثم استخدام هذا الأسلوب. إذا كان يطابق تنفيذ جاوة ذلك، ثم كبيرة. وإلا فإنك سوف تحتاج إلى تنفيذ ذلك بنفسك.

ووفقا لJavadocs:

وإرجاع الأقرب long إلى حجة. يتم تقريب النتيجة إلى عدد صحيح بإضافة 1/2، أخذ الكلمة من النتيجة، والصب نتيجة لكتابة long. وبعبارة أخرى، فإن النتيجة هي مساوية لقيمة التعبير:      

(long)Math.floor(a + 0.5d)

وتبين الاتفاقية هي محاصرة. أعتقد ويكيبيديا هي غير معصومة من الخطأ. تبين حصلت مايكروسوفت انها خاطئة، على الرغم من أنها جولة ل-4 أيضا، وهي ليست اتفاقية (راجعت مع شخص حاصل على الدكتوراه في الرياضيات).

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