জাভাতে "কড়াকড়ি" কীওয়ার্ডটি কখন ব্যবহার করব?


258

আমি এটি কী করে তা সন্ধান করেছি, তবে strictfpআপনি জাভাতে কীওয়ার্ডটি কখন ব্যবহার করবেন তার উদাহরণ কারও কাছে আছে ? কেউ কি এর জন্য আসলে ব্যবহার খুঁজে পেয়েছে?

আমার সমস্ত ভাসমান পয়েন্ট ক্রিয়াকলাপগুলিতে কেবল এটি রাখার কোনও পার্শ্ব প্রতিক্রিয়া থাকতে পারে?


1
সর্বদা, যদি না আপনার পুনরুত্পাদনযোগ্যতার প্রয়োজনের চেয়ে বেশি পারফরম্যান্স প্রয়োজন হয়।
অ্যান্টিমনি

1
@ সংস্থান - বা নির্ভুলতা / নির্ভুলতা। x86 / x64, উদাহরণস্বরূপ, 80-বিট ফ্লোটিং পয়েন্টটি অভ্যন্তরীণভাবে রেজিস্টারগুলি ব্যবহার করুন, সুতরাং ফলাফলটি স্ট্রাকফপি ছাড়াই দীর্ঘ গণনার জন্য আরও সঠিক হবে।
রবার্ট ফ্রেজার

1
@ রবার্ট আসলে, অনুমানগুলি ম্যান্টিসার সীমিত নির্ভুলতার গ্যারান্টি দেয়। পার্থক্যটি হ'ল এটি স্বাভাবিকের চেয়ে বৃহত্তর সূক্ষ্ম সূক্ষ্মতা ব্যবহার করতে পারে, যা দ্বিগুণ গোল করার কারণে বিরল ক্ষেত্রে পার্থক্য রয়েছে।
অ্যান্টিমনি

আমি ভাবছি যে এই দরকারী মডিফায়ারটিকে জয়েন্টের চারপাশে ছড়িয়ে দেওয়ার বিকল্প ছাড়াও নতুন স্টফ্লোট এবং সডুবাল আদিম স্ট্রাইকফপি ডাটাটাইপগুলি ভাল ধারণা হতে পারে।
দ্য রিলে

উত্তর:


274

স্ট্রাইকফপি নিশ্চিত করে যে আপনি প্রতি প্ল্যাটফর্মে আপনার ভাসমান পয়েন্ট গণনা থেকে ঠিক একই ফলাফল পাবেন। আপনি যদি কড়া স্টিপ ব্যবহার না করেন, জেভিএম বাস্তবায়ন যেখানে উপলব্ধ সেখানে অতিরিক্ত নির্ভুলতা ব্যবহার করতে মুক্ত free

জেএলএস থেকে :

কোনও এফপি-কঠোর অভিব্যক্তির মধ্যে, সমস্ত মধ্যবর্তী মানগুলি অবশ্যই ভাসমান মান সেট বা ডাবল মান সেটের উপাদান হতে হবে, যা বোঝায় যে সমস্ত এফপি-কড়া এক্সপ্রেশনগুলির ফলাফলগুলি আইইইই 754 গাণিতিক দ্বারা একক এবং ডাবল ফর্ম্যাটগুলি ব্যবহার করে প্রতিনিধিত্বকারীদের গাণিতিক হতে হবে । এফপি-কড়া নয় এমন একটি অভিব্যক্তির মধ্যে, মধ্যবর্তী ফলাফলগুলি উপস্থাপনের জন্য বর্ধিত এক্সপোঞ্জেন্ট রেঞ্জ ব্যবহার করার জন্য কিছু বাস্তবায়ন দেওয়া হয়; নেট ইফেক্ট, মোটামুটিভাবে বলতে গেলে, হ'ল কোনও গণনা এমন পরিস্থিতিতে "সঠিক উত্তর" তৈরি করতে পারে যেখানে ভাসমান মান সেট বা ডাবল ভ্যালু সেটের একচেটিয়া ব্যবহারের ফলে ওভারফ্লো বা আন্ডারফ্লো হতে পারে।

অন্য কথায়, এটি নিশ্চিত করা সম্পর্কে যে লিখন-একবার-চালানো-যে কোনও জায়গায় আসলে লিখন-একবার-গুন-সমানভাবে-ভুল-ফলাফল-সর্বত্রই অর্থ

কড়া স্টিপ দিয়ে আপনার ফলাফলগুলি পোর্টেবল, এটি ছাড়া এগুলি সঠিক হওয়ার সম্ভাবনা বেশি।


28
এটি পুনরুত্পাদনযোগ্য বৈজ্ঞানিক ফলাফল এবং বিট-নির্ভুল ইউনিট পরীক্ষার জন্য ব্যবহার করুন।
আলেকসান্দ্র ডাবিনস্কি

1
"আপনি যদি কড়া স্টিপ ব্যবহার না করেন, জেভিএম বাস্তবায়ন যেখানে পাওয়া যায় সেখানে অতিরিক্ত নির্ভুলতা ব্যবহারের জন্য নির্দ্বিধায়" - আপনি সেই শব্দটিকে একটি খারাপ জিনিসের মতো করেন: পি
এএমডিজি

@LinkTheProgrammer এটা অবশ্যই করতে একটি খারাপ জিনিস হতে
টিম

@ টিমকাস্টেলিজানস আমি মনে করি হ্যাপি হুইলগুলি আপনার রেফারেন্স? রিপ্লে রেকর্ড কীস্ট্রোক; এফপি-গণিত বাস্তবায়ন নির্ভুলতা বৈচিত্র্যের কারণে, পুনরায় সঞ্চালনগুলি কেবল একই ধরণের হার্ডওয়্যারে সঠিক। ভাসমান পয়েন্ট গণিতের পরিবর্তনশীলতার কারণে সৃষ্ট আরও বাস্তব সমস্যাটির নামকরণ করতে পারেন? আমি সম্ভবত একটি কণা সিমুলেটর কল্পনা করতে পারেন, কিন্তু কি আর?
এএমডিজি

সুতরাং এর অর্থ হ'ল যেখানে আমাদের একাধিক প্ল্যাটফর্ম জড়িত সেখানে উত্পাদনে সর্বদা স্ট্রাকফপি ব্যবহার করা উচিত?
বেট্রাইস

65

জাভা নির্দিষ্টকরণের লিঙ্ক সহ উইকিপিডিয়ায় আসলে এখানে এই বিষয় সম্পর্কে একটি ভাল নিবন্ধ রয়েছে ।

রেখাগুলির মধ্যে পড়া, এর অর্থ হ'ল আপনি যদি নির্দিষ্ট না করেন strictfp, তবে জেভিএম এবং জেআইটি সংকলকের কাছে আপনার ভাসমান-পয়েন্ট গণনার গণনা করার লাইসেন্স রয়েছে যদিও তারা চান। গতির স্বার্থে, তারা সম্ভবত আপনার প্রসেসরের কাছে গণনা প্রদান করবে। সঙ্গে strictfpউপর, কম্পিউটেশন আইইইই 754 গাণিতিক মান, সাথে সামঞ্জস্য আছে যা বাস্তবে, সম্ভবত মানে যে জেভিএম গণনার চেষ্টা করতে হবে।

আপনি কেন ব্যবহার করতে চান strictfp? আমি যে দৃশ্যটি দেখতে পাচ্ছি তা একটি বিতরণ অ্যাপ্লিকেশন (বা মাল্টিপ্লেয়ার গেম) এ রয়েছে যেখানে অন্তর্নিহিত হার্ডওয়্যার বা সিপিইউ যাই হোক না কেন সমস্ত ভাসমান-পয়েন্ট গণনাগুলি ডিটারমিনিস্টিক হওয়া দরকার। বাণিজ্য বন্ধ কি? সম্ভবত মৃত্যুদন্ড কার্যকর করার সময়।


5
"মধ্যবর্তী ফলাফল উপস্থাপনের জন্য একটি বর্ধিত ক্ষতিকারক ব্যাপ্তি" "তারা চাইলে আপনার ভাসমান-পয়েন্ট গণনার গণনা করার লাইসেন্স" নয়, এবং strictfpবাস্তবে গণনা এমনকি একটি অপ্রয়োজনীয় 8087 এফপিইউ ব্যবহার করে। এটি কেবল তখনই যত্ন নেওয়া দরকার। দেখুন stackoverflow.com/questions/18496560/...
পাসকাল Cuoq

আমি @ প্যাসালকুয়াক পুনরায় সাথে একমত: "আপনার ভাসমান-পয়েন্ট গণনাগুলি তারা চাইলেও গণনা করার লাইসেন্স" । যদি কিছু হয় তবে এই ক্ষেত্রে বিপরীতটি সত্য বলে মনে হয়, যেহেতু strictfpআইইইই 754 মান (যাতে আপনি সমস্ত প্ল্যাটফর্মে একই ফলাফল পান) এর সাথে সম্মতি দেয় ures আমি কেবল দেখতে পাচ্ছি যে আপনি নিজের নেটিভ হার্ডওয়ারে সত্যিই ভাল এফপিইউ উপলব্ধ থাকার সুবিধা হারাতে পারেন।
টাইপরেসার

25

এটি একটি গল্প দিয়ে শুরু হয়েছিল,

জবা যখন জেমস গসলিং, হারবার্ট এবং তার দলের বাকিরা বিকাশ করছিলেন। প্ল্যাটফর্ম ইন্ডিপেন্ডেন্স নামে তাদের এই পাগল জিনিসটি ছিল । তারা ওক (জাভা) বানাতে চেয়েছিলএটি আরও ভাল যে এটি যে কোনও মেশিনে বিভিন্ন নির্দেশিকা সেট থাকা, এমনকি বিভিন্ন অপারেটিং সিস্টেম চালানোতে ঠিক একইভাবে চালিত হবে। তবে, দশমিক পয়েন্ট সংখ্যাগুলির সাথে একটি সমস্যা ছিল যা ভাসমান পয়েন্ট এবং প্রোগ্রামিং ভাষায় দ্বিগুণ হিসাবে পরিচিত। কিছু মেশিন লক্ষ্য নির্ধারণের দক্ষতা তৈরি করেছিল যখন বাকীগুলি নির্ভুলতা লক্ষ্য করে। সুতরাং, পরবর্তী (আরও নির্ভুল) মেশিনগুলির ফ্লোটিং পয়েন্টের আকারটি 80 বিট হিসাবে ছিল যখন প্রাক্তন (আরও দক্ষ / দ্রুত) মেশিনগুলির মধ্যে 64 বিট ডাবল ছিল। তবে এটি একটি প্ল্যাটফর্ম স্বাধীন ভাষা তৈরির মূল ধারণার বিরুদ্ধে ছিল। এছাড়াও, কোনও কোড যখন কোনও মেশিনে নির্মিত হয় (bit৪ বিট আকারের দ্বিগুণ) এবং অন্য ধরণের মেশিনে চালিত হয় (৮০ বিট আকারের দ্বিগুণ) তখন এটি নির্ভুলতা / তথ্য হারাতে পারে।

আপ-সাইজিং সহ্য করা যায় তবে ডাউন-সাইজিং করা যায় না। সুতরাং, তারা স্ট্রাইকফপি অর্থাৎ কঠোর ভাসমান পয়েন্টের ধারণাটি পেয়েছিল । আপনি যদি এই কীওয়ার্ডটি কোনও ক্লাস / ফাংশন দিয়ে ব্যবহার করেন তবে এর ফ্লোটিং পয়েন্ট এবং ডাবলসের কোনও মেশিনের সাথে সামঞ্জস্যপূর্ণ আকার থাকে। অর্থাৎ যথাক্রমে 32/64-বিট।


8
স্ট্রাক্টপিপি জাভা 1.2 তে চালু হয়েছিল। ওকের নকশা করা হওয়ার পরে এটি অনেক পরে ছিল।
থরবজর্ন রাভন অ্যান্ডারসন

"দশমিক পয়েন্ট সংখ্যাগুলিও ভাসমান বিন্দু হিসাবে পরিচিত" - দশমিক অর্থ বেস 10, এবং ভাসমান পয়েন্ট উপস্থাপনার সাথে কিছুই করার নেই।
আইয়ুব

21

এখানে বেশ কয়েকটি উল্লেখ রয়েছে:

  • স্ট্রাইকফপি (জেডিসি প্রযুক্তি টিপ) ব্যবহার করে
  • jGuru: স্ট্রাইকফপি মডিফায়ার কী? আমি কখন এটি ব্যবহার বিবেচনা করব?

    মূলত, এগুলি কীভাবে ফুটে ওঠে তা হ'ল আপনার কোডটিতে ভাসমান-পয়েন্টের এক্সপ্রেশনগুলির ফলাফলগুলি দ্রুত বা অনুমানযোগ্য care উদাহরণস্বরূপ, যদি আপনার এমন উত্তরগুলির প্রয়োজন হয় যা আপনার কোডটি সামনে আসে যা একাধিক প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ হতে ভাসমান-পয়েন্ট মান ব্যবহার করে তবে ব্যবহার করুন strictfp

  • স্ট্রাকফপি - জাভা গ্লোসারি

    ফ্লোটিং পয়েন্ট হার্ডওয়্যার আরও নির্ভুলতার সাথে এবং জাভা স্পেসিফিকেশন প্রয়োজনের তুলনায় বৃহত্তর মানের সাথে গণনা করে। কিছু প্ল্যাটফর্ম অন্যদের চেয়ে বেশি নির্ভুলতা দিলে বিভ্রান্তিকর হবে। আপনি যখন strictfpকোনও পদ্ধতি বা ক্লাসে মডিফায়ার ব্যবহার করেন , সংকলকটি এমন কোড উত্পন্ন করে যা সমস্ত প্ল্যাটফর্মগুলিতে অভিন্ন ফলাফলের জন্য জাভা বৈশিষ্টের সাথে কঠোরভাবে মেনে চলে। ছাড়া strictfp, এটা সামান্য laxer হয়, কিন্তু না, তাই শিথিল যেমন পেন্টিয়াম মধ্যে পাহারা বিট ব্যবহার করতে স্পষ্টতা 80 বিট দিতে।

  • এবং পরিশেষে আসল জাভা ভাষার স্পেসিফিকেশন, .415.4 এফপি-কড়া এক্সপ্রেশন :

    কোনও এফপি-কঠোর অভিব্যক্তির মধ্যে, সমস্ত মধ্যবর্তী মানগুলি অবশ্যই ভাসমান মান সেট বা ডাবল মান সেটের উপাদান হতে হবে, যা বোঝায় যে সমস্ত এফপি-কড়া এক্সপ্রেশনগুলির ফলাফলগুলি অবশ্যই আইইইই 754 গাণিতিক দ্বারা একক এবং ডাবল ফর্ম্যাটগুলি ব্যবহার করে প্রতিনিধিত্ব করে । এফপি-কঠোর নয় এমন একটি অভিব্যক্তির মধ্যে, মধ্যবর্তী ফলাফলগুলি উপস্থাপনের জন্য বর্ধিত এক্সপোঞ্জেন্ট রেঞ্জ ব্যবহার করার জন্য কিছু বাস্তবায়ন দেওয়া হয়; নেট ইফেক্ট, মোটামুটিভাবে বলতে গেলে, হ'ল কোনও গণনা এমন পরিস্থিতিতে "সঠিক উত্তর" তৈরি করতে পারে যেখানে ভাসমান মান সেট বা ডাবল ভ্যালু সেটের একচেটিয়া ব্যবহারের ফলে ওভারফ্লো বা আন্ডারফ্লো হতে পারে।

যদিও ব্যক্তিগতভাবে আমি এর জন্য কখনও ব্যবহার করি নি।


12

অন্যান্য উত্তরগুলির উল্লেখ হিসাবে এটি মধ্যবর্তী ভাসমান পয়েন্টের ফলাফলগুলি আইইইই স্পেসিফিকেশনটির সাথে সামঞ্জস্য করে। বিশেষত x86 প্রসেসরগুলি আইইইই স্পেক থেকে আলাদা নির্ভুলতার সাথে মধ্যবর্তী ফলাফলগুলি সঞ্চয় করতে পারে। পরিস্থিতি আরও জটিল হয়ে ওঠে যখন জেআইটি একটি নির্দিষ্ট গণনা অনুকূলিত করে; ক্রম নির্দেশাবলী আলাদা হতে পারে প্রতিটি সময় সামান্য ভিন্ন বৃত্তাকার।

কড়া স্টাফ দ্বারা ওভারহেড সম্ভবত খুব প্রসেসর এবং জেআইটি নির্ভর হতে পারে। এসএসই 2-র এই উইকিপিডিয়া নিবন্ধটিতে সমস্যার কিছুটা অন্তর্দৃষ্টি রয়েছে বলে মনে হচ্ছে। সুতরাং জেআইটি যদি কোনও গণনা সম্পাদনের জন্য এসএসই নির্দেশনা উত্পন্ন করতে পারে তবে মনে হয় স্ট্রাইকফ্পের কোনও ওভারহেড থাকবে না।

আমার বর্তমান প্রকল্পে কয়েকটি জায়গা রয়েছে যেখানে আমি কড়া স্ট্রিপ ব্যবহার করি। এমন একটি পয়েন্ট রয়েছে যেখানে সম্ভাব্য মহাজাগতিক রশ্মিগুলি পিক্সেল মানগুলি থেকে সরানো প্রয়োজন। যদি বাইরের কোনও গবেষকের সামনে একই পিক্সেল মান এবং মহাজাগতিক রশ্মি থাকে তবে তাদের উচিত আমাদের সফ্টওয়্যার হিসাবে একই ফলাফল ফলাফল।


8
  • কড়াকড়ি একটি আইডিইপি 754 হিসাবে ভাসমান পয়েন্ট গণনা সীমাবদ্ধ যা একটি পরিবর্তনকারী।

  • এটি পুরো ক্লাসে যেমন "পাবলিক স্ট্রাইকফপি ক্লাস স্ট্রাইকএফপি মডিফায়ার উদাহরণ {}" বা পদ্ধতিতে "পাবলিক স্ট্রাইকফপি অকার্যকর উদাহরণ ()" ব্যবহার করা যেতে পারে। এটি যদি ক্লাসে ব্যবহার করা হয় তবে সমস্ত পদ্ধতি আইইইই 754 অনুসরণ করবে এবং যদি পদ্ধতিতে ব্যবহার করা হয় তবে নির্দিষ্ট পদ্ধতি হবে আইইইই 754 অনুসরণ করুন।

  • কেন এটি ব্যবহার করা হচ্ছে ?? ::: বিভিন্ন প্ল্যাটফর্মে বিভিন্ন ভাসমান বিন্দু হার্ডওয়্যার রয়েছে যা জাভা স্পেসিফিকেশনের চেয়ে আরও স্পষ্টতা এবং বৃহত্তর মানগুলির সাথে গণনা করে যা ডিফারেন্ট প্ল্যাটফর্মগুলিতে পৃথক আউটপুট তৈরি করতে পারে so সুতরাং এটি ভিন্ন ভিন্ন নির্বিশেষে একই আউটপুট নিশ্চিত করে plateforms

  • স্টারডফপি বর্ধিত নির্ভুলতা ভাসমান-পয়েন্ট ক্রিয়াকলাপগুলির গতি এবং যথাযথতার সুযোগ নিতেও নিশ্চিত করে।

  • ভাসমান পয়েন্ট গণনা করার সময় আমরা এই কীওয়ার্ডটি ব্যবহার করতে পারি না এমন কোনও অসুবিধা নেই

  • আমার শেষ পয়েন্টটি হ'ল - সংক্ষিপ্ত আইইইই 75৫৪ এ আইইইই 75৫৪ কী যা ফ্লোটিং পয়েন্ট গণনা এবং উভয়ই একক (32-বিট, জাভা ফ্লোটে ব্যবহৃত) বা ডাবল (64-বিট, জাভাতে ব্যবহৃত) এর ভাসমান পয়েন্টের মান সংরক্ষণের জন্য স্ট্যান্ডার্ড পদ্ধতি নির্ধারণ করে ডাবলস) নির্ভুলতা.এটি মধ্যবর্তী গণনার জন্য এবং প্রসারিত নির্ভুলতার ফর্ম্যাটগুলির জন্য আদর্শকেও সংজ্ঞায়িত করে।


2

strictfpএকটি কীওয়ার্ড এবং ক্লাস বা কোনও পদ্ধতির জন্য অ-অ্যাক্সেস অ-অ্যাক্সেস মডিফায়ার হিসাবে ব্যবহার করা যেতে পারে (তবে কখনই ভেরিয়েবল নয়)। শ্রেণিটি চিহ্নিত করা strictfpমানে ক্লাসের যে কোনও পদ্ধতি কোড ভাসমান পয়েন্টগুলির জন্য আইইইই 754 মান নিয়ম মেনে চলবে।

এই সংশোধক ছাড়াই, পদ্ধতিগুলিতে ব্যবহৃত ভাসমান পয়েন্টগুলি প্ল্যাটফর্ম নির্ভর উপায়ে আচরণ করতে পারে। এটি দিয়ে আপনি পূর্বাভাস দিতে পারেন যে জেভিএম চলমান অন্তর্নিহিত প্ল্যাটফর্ম নির্বিশেষে আপনার ভাসমান পয়েন্টগুলি কীভাবে আচরণ করবে। ক্ষয়ক্ষতিটি হ'ল যদি অন্তর্নিহিত প্ল্যাটফর্মটি আরও বেশি নির্ভুলতার পক্ষে সহায়তা করতে সক্ষম হয় তবে কোনও strictfpপদ্ধতি এটির সুবিধা নিতে সক্ষম হবে না।

যদি আপনি কোনও শ্রেণি হিসাবে ঘোষণা না করেন তবে আপনি strictfpএখনও strictfpকোনও পদ্ধতি হিসাবে ঘোষণা করে কোনও পদ্ধতি দ্বারা পদ্ধতি ভিত্তিতে আচরণ পেতে পারেন strictfp

Java জাভা for 6- এর জন্য এসসিজেপি সুন® সার্টিফাইড প্রোগ্রামার - ক্যাথি সিয়েরা এবং বার্ট বেটস ~


0

উদাহরণস্বরূপ নীচে উদাহরণস্বরূপ এটি আরও পরিষ্কার বুঝতে সাহায্য করুন: জাভাতে যখনই আমরা কোনও ক্রিয়াকলাপের জন্য সুনির্দিষ্ট তথ্য খুঁজছি যেমন আমরা যদি ডাবল num1 = 10e + 102 করি; ডাবল num2 = 8e + 10; ফলাফল = num1 + num2;

        The output will be so long and not precise, becasue it is precissed by the hardware e.g JVM and JIT has the license 
        as long as we dont have specify it Strictfp

Marking it Strictfp will make the result Uniform on every hardware and platform, because its precised value will be same
One scenario I can see is in a distributed application (or multiplayer game) where all floating-point calculations need to 
be deterministic no matter what the underlying hardware or CPU is.

0

স্পষ্টভাবে, জাভাতে ভাসমান পয়েন্ট গণনার (ফ্লোট বা ডাবল) নির্ভুলতার জন্য বাধ্যতামূলকভাবে স্ট্রাইকফপি কীওয়ার্ড ব্যবহার করা হয়। আপনি যদি কড়া স্টার্ট কীওয়ার্ড ব্যবহার না করেন তবে ভাসমান পয়েন্ট যথার্থতা লক্ষ্য প্ল্যাটফর্মের হার্ডওয়ারের উপর নির্ভর করে।

যদি ইন্টারফেস বা শ্রেণিটি কড়া স্টাফ দিয়ে ঘোষণা করা হয়, তবে সেই ইন্টারফেস বা শ্রেণীর মধ্যে থাকা সমস্ত পদ্ধতি এবং নেস্টেড প্রকারগুলি স্পষ্টতই স্ট্রাইকফপি হয়।

রেফারেন্স লিঙ্ক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.