سؤال

أعلم أن هذا سؤال مكررة. لكنني أريد أن أعرف ذلك بمثال. لذلك يمكن لأي شخص أن يفسر ذلك بمثال؟

رابط إلى وظيفة مكررة: متى يجب أن أستخدم الكلمة الرئيسية "stressfp" في جافا؟

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

المحلول

حسنا، إجابة Girinie تلخصها بشكل جيد، ولكن إذا كنت تبحث عن مثال ..

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

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

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

بينما strictfp وبالتأكيد ليس رصاصة فضية، فقد سارت شوطا طويلا في فرض بعض الاتساقات من تعليمات "إعادة التشغيل" عبر منصات مختلفة.

نصائح أخرى

هذا هو ما لغة جافا المواصفات يقول:

ضمن تعبير صارم في FP، يجب أن تكون جميع القيم الوسيطة عناصر من مجموعة القيمة العائمة أو مجموعة القيمة المزدوجة، مما يعني أن نتائج جميع التعبيرات الصارمة لكل FP يجب أن تكون أولئك الذين توقعتهم IEEE 754 حسابي على المعاملات الممثلة باستخدام صيغ مفردة ومزدوجة وبعد ضمن تعبير ليس FP الصارم، يتم منح بعض Leeway لتنفيذها لاستخدام مجموعة مستردة ممتدة لتمثيل النتائج المتوسطة؛ النتيجة الصافية، تحدث تقريبا، هو أن الحساب قد ينتج عنه "الإجابة الصحيحة" في المواقف حيث قد يؤدي الاستخدام الحصري لمجموعة القيمة العائمة أو مجموعة ذات قيمة مزدوجة إلى تجاوز أو لا يتجزأ.

ما يعني ذلك هو: الحساب النقاط العائمة (أي حسابات تنطوي على float و double أنواع) في جافا محددة لتصل إلى IEEE 754. معيار، الذي يقول بالضبط كيفية تمثيل أرقام FP. المشكلة هي أن وحدات المعالجة المركزية الحديثة تستخدم الحساب الدولي FP الذي لا يتلمع بهذا المعيار للنتائج المتوسطة - هذه ليست مشكلة عموما لأنها في الواقع أسرع وتجسد نتائج أكثر دقة. ولكن قد يعني ذلك أن البرنامج ينتج نتائج مختلفة قليلا اعتمادا على الأجهزة التي تديرها - والتي تعارض الوعد الأساسي من أجل استقلال جافا.

ال strictfp تتيح لك الكلمة الرئيسية التأكد من أن هذا الوعد يتم الاحتفاظ به وسيتعين على البرنامج بنفس النتيجة بالضبط، بغض النظر عن المكان الذي يديره - ولكن هذا يأتي عند تكلفة الأداء الأدنى على الأجهزة حيث يجب أن يتم بذل جهد إضافي لجعل حساب FP Adher To IEEE 754 على جميع النتائج المتوسطة.

معظم الوقت، ستحتوي على أفضل أداء أفضل بدلا من المواصفة الناجمة عن المنصات، وهذا هو السبب strictfp السلوك اختياري. في الواقع كان مصنوع اختياري في Java 1.4 بعد أن أدرك منفذي JVM أنهم اضطروا إلى جعل وحدة المعالجة المركزية القيام بعمل إضافي لإلغاء المواصفات عندما يكون معظم الوقت هذا الالتزام الصارم ليس لديه مزايا.

صرامة خاصة جدا.

دعونا نرى مع مثال وكالة الفضاء.

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

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

النقطة الرئيسية هي أنه عندما ترسل البيانات للتقييم لتتبع السفينة، فإنها يجب إرجاع القيمة التي هي نفسها لمنصة مختلفة آخر سوف نتلقى البيانات مختلفة قليلا في القيمة العشرية.

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

لهذا الشرط لدينا صارمة في جافا.

تريد برنامج لإظهاره، من الصعب إظهار هذا بدقة مع برنامج صغير.

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