আইইইই 754-2008 ফ্লোটিং-পয়েন্ট অ্যারিমেটিকের জন্য স্ট্যান্ডার্ড এবং আইএসও / আইইসি 10967 ল্যাংগুয়েজ ইন্ডিপেন্ডেন্ট এরিথমেটিক (এলআইএ) স্ট্যান্ডার্ড, পর্ব 1 উত্তর কেন এটি এমন।
আইইইই 754 § 6.3 সাইন বিট
যখন কোনও ইনপুট বা ফলাফল হয় NaN, এই মানটি কোনও NaN এর চিহ্নটির ব্যাখ্যা দেয় না। নোট, তবে, বিট স্ট্রিংগুলিতে অপারেশনগুলি - অনুলিপি, নেগেটিভ, অ্যাবস, কপিসাইন - একটি NaN ফলাফলের সাইন বিট নির্দিষ্ট করে, কখনও কখনও কোনও NaN অপারেন্ডের সাইন বিটের উপর ভিত্তি করে। লজিক্যাল প্রিকেট টোটাল অর্ডারও কোনও এনএন অপারেন্ডের সাইন বিট দ্বারা প্রভাবিত হয়। অন্যান্য সমস্ত ক্রিয়াকলাপের জন্য, এই মানটি কোনও NaN ফলাফলের সাইন বিট নির্দিষ্ট করে না, এমনকি যখন কেবল একটি ইনপুট NaN থাকে, বা যখন একটি অবৈধ ক্রিয়াকলাপ থেকে NaN উত্পাদিত হয়।
যখন ইনপুট বা ফলাফল উভয়ই এনএএন নয়, তখন কোনও পণ্য বা ভাগফলের চিহ্নটি অপারেটরদের লক্ষণের একচেটিয়া OR হয়; যোগফলের চিহ্ন, বা একটি পার্থক্যের চিহ্ন - y কে যোগফল হিসাবে গণনা করা হয় x + ()y), সংযোজনের লক্ষণগুলির মধ্যে একটির থেকে পৃথক; এবং রূপান্তরগুলির ফলাফল, কোয়ান্টাইজ অপারেশন, রাউন্ডটো-ইন্টিগ্রাল অপারেশনস এবং রাউন্ডটোইন্টেগ্রাল্যাক্স্যাক্ট (দেখুন 5.3.1) প্রথম বা একমাত্র অপারেন্ডের চিহ্ন। অপারেটস বা ফলাফল শূন্য বা অসীম হলেও এই নিয়মগুলি প্রযোজ্য।
বিপরীত চিহ্ন সহ দুটি অপারেন্ডের যোগফল (বা দুটি চিহ্নের মতো চিহ্নের পার্থক্য) হ'ল শূন্য হলে, সেই যোগফল (বা পার্থক্য) এর চিহ্নটি রাউন্ডওয়ার্ডনেজিটিভ ব্যতীত সমস্ত বৃত্তাকার-দিক বৈশিষ্ট্যগুলিতে +0 হবে; এই বৈশিষ্ট্যের অধীনে, একটি সঠিক শূন্য রাশি (বা পার্থক্য) এর চিহ্ন −0 হবে। তবে, x + x = x - (−x) x শূন্য হলেও এমনকি এক্স হিসাবে একই চিহ্নটি ধরে রাখে।
সংযোজন এর কেস
ডিফল্ট রাউন্ডিং মোডের অধীনে (রাউন্ড-টু-নিকটবর্তী, টাইস-টু-ইনিও) , আমরা দেখি যে এটি x+0.0
উত্পাদন করে x
, যখন থাকে x
তবে -0.0
: আমাদের ক্ষেত্রে দুটি সংখ্যার বিপরীত চিহ্ন রয়েছে যার সমষ্টি শূন্য, এবং §6.3 অনুচ্ছেদ রয়েছে 3 নিয়ম এই সংযোজন উত্পাদন করে+0.0
।
যেহেতু মূলটির সাথে বিটওয়াইজ অভিন্ন +0.0
নয় , এবং এটি একটি বৈধ মান যা ইনপুট হিসাবে ঘটতে পারে, তাই সংকলকটি কোডটি রাখতে বাধ্য হয় যা সম্ভাব্য নেতিবাচক শূন্যগুলিকে রূপান্তর করবে ।-0.0
-0.0
+0.0
সংক্ষিপ্তসার: ডিফল্ট রাউন্ডিং মোডের অধীনে x+0.0
, যদি, হয়x
- নয়
-0.0
, তারপর x
নিজেই একটি গ্রহণযোগ্য আউটপুট মান।
- হয়
-0.0
, তারপরে আউটপুট মানটি অবশ্যই হতে হবে +0.0
, যা বিটওয়াসার সাথে একরকম নয় -0.0
।
গুণটির কেস
ডিফল্ট রাউন্ডিং মোডের অধীনে , এর সাথে কোনও সমস্যা হয় না x*1.0
। যদি x
:
বিয়োগের কেস
ডিফল্ট rounding মোড অধীনে , বিয়োগ x-0.0
একটি নো-অপ, কারণ এটি সমতূল্য হয় x + (-0.0)
। যদি x
হয়
- হয়
NaN
তারপর §6.3p1 এবং §6.2.3 উপরন্তু এবং গুণ হিসাবে একই ভাবে প্রযোজ্য।
- হয়
+/- infinity
, তবে ফলাফলটি +/- infinity
একই চিহ্নের হয়।
- সর্বদা একটি (উপ) সাধারণ সংখ্যা
x-0.0 == x
।
- হয়
-0.0
, তাহলে §.3.৩p2 দ্বারা আমাদের " [...] একটি যোগফলের চিহ্ন বা কোনও পার্থক্যের চিহ্ন - y এর যোগফলকে x + ()y) হিসাবে বিবেচনা করা হয়, সংযোজনের চিহ্নগুলির মধ্যে একটির থেকে পৃথক; "। এই বাহিনী আমাদের দায়িত্ব অর্পণ করা -0.0
এর ফলে (-0.0) + (-0.0)
, কারণ -0.0
থেকে সাইন ইন পৃথক কেউ addends এর, যখন +0.0
থেকে সাইন ইন পৃথক দুই addends, এই দফা লঙ্ঘন।
- হ'ল
+0.0
, তাহলে এটি কেস অফ অ্যাডিশনে(+0.0) + (-0.0)
উপরে বিবেচিত সংযোজন ক্ষেত্রে হ্রাস পাবে , যা §§.৩.৩২ দ্বারা দেওয়ার রায় দেওয়া হয়েছে ।+0.0
যেহেতু সমস্ত ক্ষেত্রে ইনপুট মান আউটপুট হিসাবে বৈধ, তাই x-0.0
কোনও অপ-বিকল্প এবং x == x-0.0
টাউটোলজি বিবেচনা করা অনুমোদিত।
মান-পরিবর্তন অপ্টিমাইজেশান
আইইইই 754-2008 স্ট্যান্ডার্ডের নিম্নলিখিত আকর্ষণীয় উক্তি রয়েছে:
আইইইই 754 § 10.4 শাব্দিক অর্থ এবং মান পরিবর্তনের অপ্টিমাইজেশন
[...]
নিম্নলিখিত মান পরিবর্তনকারী রূপান্তরগুলি, অন্যদের মধ্যে, উত্স কোডের আক্ষরিক অর্থ সংরক্ষণ করে:
- X শূন্য নয় এবং সিগন্যালিং এনএএন নয় এবং সনাক্তকরণের বৈশিষ্ট্য 0 + x প্রয়োগ করা হলে এক্স এর সমান এক্সপোনেন্ট থাকে।
- X যখন সিগন্যালিং এনএন নয় এবং পরিচয়ের বৈশিষ্ট্যটি 1 × x প্রয়োগ করা হয় তখন এক্স এর সমান এক্সপোনেন্ট থাকে।
- শান্ত NaN এর পেডলোড বা সাইন বিট পরিবর্তন করা।
- [...]
যেহেতু সমস্ত এনএএন এবং সমস্ত অসম্পূর্ণতা একই ঘাতক হিসাবে ভাগ করে, এবং সীমাবদ্ধতার জন্য x+0.0
এবং সঠিকভাবে বৃত্তাকার ফলাফলের ঠিক একই মাত্রা থাকে , তাই তাদের প্রকাশক একই।x*1.0
x
x
sNaNs
সিগন্যালিং এনএএনগুলি হ'ল ভাসমান-পয়েন্ট ট্র্যাপ মান; এগুলি হ'ল বিশেষ এনএএন মান যার ফলসিং-পয়েন্ট অপারেন্ড হিসাবে ব্যবহারের ফলে অবৈধ অপারেশন ব্যতিক্রম (এসএফএফপিই) আসে। যদি একটি লুপ একটি ব্যতিক্রম ট্রিগার অপ্টিমাইজ করা হয়, সফ্টওয়্যার আর একই আচরণ করবে না।
যাইহোক, ব্যবহারকারী 2357112 মন্তব্যে উল্লেখ করেছেন , সি 11 স্ট্যান্ডার্ড স্পষ্টতই সংকেত NaNs ( sNaN
) এর আচরণের অপরিজ্ঞাতভাবে ছেড়ে দেয় , সুতরাং সংকলকটি অনুমান করতে পারে যে সেগুলি ঘটে না, এবং এইভাবে তারা উত্থাপিত ব্যতিক্রমগুলিও ঘটে না। সি ++ 11 স্ট্যান্ডার্ড NaN- কে সিগন্যাল করার আচরণের বর্ণনা বর্ণনা বাদ দেয় এবং এটি এটিকে অপরিবর্তিত রাখে।
রাউন্ডিং মোডগুলি
বিকল্প রাউন্ডিং মোডে, অনুমতিযোগ্য অপ্টিমাইজেশন পরিবর্তন হতে পারে। উদাহরণস্বরূপ, রাউন্ড টু নেগেটিভ-ইনফিনিটি মোডের অধীনে, অপ্টিমাইজেশন x+0.0 -> x
জায়েজ x-0.0 -> x
হয়ে যায় তবে তা নিষিদ্ধ হয়ে যায়।
জিসিসিকে ডিফল্ট রাউন্ডিং মোড এবং আচরণগুলি ধরে নেওয়া থেকে বিরত রাখতে পরীক্ষামূলক পতাকাটি জিসিসিতে দেওয়া -frounding-math
যেতে পারে।
উপসংহার
ঝনঝন এবং জিসিসি , এমনকি -O3
, আইইইই -৫4৪ অনুসারী। এর অর্থ এটি আইইইই -754 মানক এর উপরোক্ত নিয়মাবলী অনুসরণ করা আবশ্যক। x+0.0
হয় বিট-অভিন্ন না করতে x
সকলের জন্য x
যারা নিয়ম অধীন, কিন্তু x*1.0
তাই হতে করার জন্য চয়ন করা যেতে পারে : যখন আমরা, যথা
x
যখন এটি এনএএন হয় তখন অপরিবর্তিত পে-লোডটি পাস করার প্রস্তাবটি মেনে চলুন ।
- কোনও NaN ফলাফলের সাইন বিটটি অপরিবর্তিত রেখে দিন
* 1.0
।
- ভাগফল / পণ্য চলাকালীন সাইন বিটটি XOR করার আদেশ মেনে চলুন, যখন কোনও এনএএন
x
হয় না ।
আইইইই -754-অনিরাপদ অপ্টিমাইজেশান সক্ষম করতে (x+0.0) -> x
, পতাকাটি -ffast-math
ক্ল্যাং বা জিসিসিতে পাস করা দরকার।