মাধ্যমে পড়া ECMAScript প্রোগ্রামিং 5.1 স্পেসিফিকেশন , +0এবং -0আলাদা করা হয়।
তাহলে +0 === -0মূল্যায়ন কেন true?
Object.is+0 এবং -0 পার্থক্য করতে ব্যবহার করতে পারেন
মাধ্যমে পড়া ECMAScript প্রোগ্রামিং 5.1 স্পেসিফিকেশন , +0এবং -0আলাদা করা হয়।
তাহলে +0 === -0মূল্যায়ন কেন true?
Object.is+0 এবং -0 পার্থক্য করতে ব্যবহার করতে পারেন
উত্তর:
জাভাস্ক্রিপ্ট সংখ্যা উপস্থাপনের জন্য আইইইই 754 মান ব্যবহার করে । উইকিপিডিয়া থেকে :
স্বাক্ষরযুক্ত শূন্য একটি সম্পর্কিত চিহ্ন সহ শূন্য। সাধারণ গাণিতিক ক্ষেত্রে, −0 = +0 = 0. তবে, কম্পিউটিংয়ে কিছু সংখ্যক উপস্থাপনা দুটি শূন্যের অস্তিত্বের অনুমতি দেয়, প্রায়শই −0 (negative ণাত্মক শূন্য) এবং +0 (ধনাত্মক শূন্য) দ্বারা চিহ্নিত হয় । এটি পূর্ণসংখ্যার জন্য কিছু স্বাক্ষরিত সংখ্যার উপস্থাপনায় এবং বেশিরভাগ ভাসমান পয়েন্ট সংখ্যা উপস্থাপনায় ঘটে। 0 নম্বরটি সাধারণত +0 হিসাবে এনকোড করা হয় তবে এটি +0 বা −0 দ্বারা প্রতিনিধিত্ব করা যেতে পারে।
ভাসমান পয়েন্ট গণিতের জন্য আইইইই 754 স্ট্যান্ডার্ড (বর্তমানে বেশিরভাগ কম্পিউটার এবং প্রোগ্রামিং ল্যাঙ্গুয়েজ যা ভাসমান পয়েন্ট সংখ্যা সমর্থন করে) এর জন্য +0 এবং both0 উভয়ই প্রয়োজন। শূন্যগুলি বর্ধিত আসল সংখ্যা লাইনের একটি বৈকল্পিক হিসাবে বিবেচনা করা যেতে পারে যেমন 1 / −0 = −∞ এবং 1 / + 0 = + ∞, শূন্য দ্বারা বিভাগ কেবলমাত্র ± 0 / ± 0 এবং ± ∞ / ± for ।
নিবন্ধটিতে বিভিন্ন উপস্থাপনা সম্পর্কে আরও তথ্য রয়েছে।
সুতরাং এই কারণেই, প্রযুক্তিগতভাবে উভয় শূন্যকে আলাদা করতে হবে।
যাইহোক,
+0 === -0মূল্যায়ন সত্য। কেন এটি (...)?
এই আচরণটি স্পষ্টভাবে বিভাগ 11.9.6 , স্ট্রাইক ইক্যুয়ালিটি তুলনা অ্যালগরিদম (আংশিকভাবে আমার উপর জোর দেওয়া):
তুলনা
x === y, যেখানেxএবংyমানগুলি সত্য বা মিথ্যা উত্পাদন করে । যেমন একটি তুলনা নিম্নলিখিত হিসাবে সঞ্চালিত হয়:(...)
টাইপ (x) যদি সংখ্যা হয় তবে
- যদি এক্স NaN হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- যদি YNN হয় তবে মিথ্যা প্রত্যাবর্তন করুন।
- X যদি y এর সমান সংখ্যার মান হয় তবে সত্যটি প্রত্যাবর্তন করুন।
- যদি x +0 হয় এবং y −0 হয় তবে সত্য আসুন।
- যদি x −0 হয় এবং y +0 হয় তবে সত্য আসুন।
- মিথ্যা প্রত্যাবর্তন।
(...)
( +0 == -0বিটিডব্লিউর ক্ষেত্রেও এটিই রয়েছে )
এটি যৌক্তিকভাবে চিকিত্সা করা +0এবং -0সমান হিসাবে মনে হয়। অন্যথায় আমাদের এটিকে আমাদের কোডে নেওয়া উচিত এবং আমি ব্যক্তিগতভাবে তা করতে চাই না;)
বিঃদ্রঃ:
ES2015 একটি নতুন তুলনা পদ্ধতি প্রবর্তন করে Object.is,। Object.isস্পষ্টভাবে -0এবং এর মধ্যে পার্থক্য করে +0:
Object.is(-0, +0); // false
1/0 === Infinity; // trueএবং 1/-0 === -Infinity; // true।
1 === 1এবং +0 === -0কিন্তু 1/+0 !== 1/-0। কত অদ্ভুত!
+0 !== -0)) এটি সত্যিই সমস্যা তৈরি করতে পারে।
0 !== +0/ 0 !== -0, যা প্রকৃতপক্ষে সমস্যাও তৈরি করবে!
আমি এটি একটি উত্তর হিসাবে যুক্ত করব কারণ আমি @ ব্যবহারকারী 113716 এর মন্তব্যকে অগ্রাহ্য করেছি।
আপনি এটি করে -0 এর জন্য পরীক্ষা করতে পারেন:
function isMinusZero(value) {
return 1/value === -Infinity;
}
isMinusZero(0); // false
isMinusZero(-0); // true
e±308আপনার সংখ্যাটি কেবলমাত্র অস্বীকৃত আকারে উপস্থাপন করা যেতে পারে এবং এগুলি কোনও ক্ষেত্রে সমর্থন করা যায় কি না সে সম্পর্কে বিভিন্ন বাস্তবায়নের বিভিন্ন মতামত রয়েছে। -0মুল বক্তব্যটি হ'ল কিছু ভাসমান পয়েন্ট মোডের কয়েকটি মেশিনে আপনার নম্বরটি অন্য হিসাবে ডেনোরমালাইজড নম্বর হিসাবে প্রদর্শিত হয় 0.000000000000001e-308। যেমন ভাসমান, তাই মজাদার
আমি কেবল একটি উদাহরণ পেয়েছি যেখানে +0 এবং -0 সত্যিই খুব আলাদা আচরণ করে:
Math.atan2(0, 0); //returns 0
Math.atan2(0, -0); //returns Pi
সতর্কতা অবলম্বন করুন: এমনকি ম্যাথ.গ্রাউন্ড -0.0001 এর মতো নেতিবাচক সংখ্যায় ব্যবহার করার পরেও এটি আসলে -0 হবে এবং উপরে বর্ণিত কিছু পরবর্তী গণনাগুলি স্ক্রু করতে পারে।
এটির সমাধানের দ্রুত এবং নোংরা উপায়টি হ'ল:
if (x==0) x=0;
বা শুধু:
x+=0;
এটি সংখ্যাটি -0 হলে এটি 0-এ রূপান্তর করে।
ইন আইইইই 754 মান জাভাস্ক্রিপ্ট মধ্যে নম্বর টাইপ করুন প্রতিনিধিত্ব করতে ব্যবহৃত, সাইন একটি বিট দ্বারা প্রতিনিধিত্ব করা হয় (ক 1 একটি ঋণাত্মক সংখ্যা নির্দেশ করে)।
ফলস্বরূপ, প্রতিটি প্রতিনিধিত্বমূলক সংখ্যার জন্য একটি নেতিবাচক এবং ধনাত্মক মান উভয়ই বিদ্যমান 0।
এই কারণেই -0এবং উভয়ই +0বিদ্যমান।
মূল শিরোনামের উত্তর দেওয়া Are +0 and -0 the same?:
brainslugs83(এর উত্তরের মন্তব্যে Spudley) একটি গুরুত্বপূর্ণ কেসটি নির্দেশ করেছে যাতে জেএসে +0 এবং -0 এক নয় - ফাংশন হিসাবে প্রয়োগ করা হয়েছে:
var sign = function(x) {
return 1 / x === 1 / Math.abs(x);
}
এটি মানক ব্যতীত Math.sign+0 এবং -0 এর সঠিক চিহ্নটি প্রদান করবে।
0 এর জন্য দুটি সম্ভাব্য মান (বিট উপস্থাপনা) রয়েছে এটি অনন্য নয়। বিশেষত ভাসমান পয়েন্ট সংখ্যাগুলিতে এটি ঘটতে পারে। কারণ ভাসমান পয়েন্ট সংখ্যাগুলি আসলে এক ধরণের সূত্র হিসাবে সঞ্চয় করা হয়।
পূর্ণসংখ্যা পৃথক উপায়েও সংরক্ষণ করা যেতে পারে। অতিরিক্ত সাইন-বিট সহ আপনার সংখ্যার মান থাকতে পারে, তাই 16 বিট স্পেসে আপনি একটি 15 বিট পূর্ণসংখ্যা মান এবং একটি সাইন-বিট সংরক্ষণ করতে পারেন। এই উপস্থাপনায়, মান 1000 (হেক্স) এবং 0000 উভয়ই 0, তবে এর মধ্যে একটি +0 এবং অন্যটি -0 হয়।
এটি পূর্ণসংখ্যার মান থেকে 1 বিয়োগ করে এড়ানো যায় তাই এটি -1 থেকে -2 ^ 16 অবধি, তবে এটি অসুবিধে হবে।
আরও সাধারণ পদ্ধতির মধ্যে 'দুটি পরিপূরক'-তে পূর্ণসংখ্যার সঞ্চয় করা হয়, তবে দৃশ্যত ইসিএমএসক্রিপ্টটি তা না করা বেছে নিয়েছে। এই পদ্ধতিতে সংখ্যাগুলি 0000 থেকে 7FFF ধনাত্মক হয়। নেতিবাচক সংখ্যাগুলি এফএফএফএফ (-1) থেকে 8000 এ শুরু হয়।
অবশ্যই, একই নিয়মগুলি বৃহত্তর পূর্ণসংখ্যার ক্ষেত্রেও প্রযোজ্য, তবে আমি চাই না আমার এফটি শেষ হয়ে যায়। ;)
+0 === -0একটু অদ্ভুত মনে হয় না? কারণ এখন আমাদের আছে 1 === 1এবং +0 === -0তবে 1/+0 !== 1/-0...
+0 === -0দুটি বিট উপস্থাপনা ভিন্ন হওয়ার পরেও আপনি ব্যাখ্যা করবেন না ।
আমি একে কঠোর সমতা তুলনা পদ্ধতিতে ('===') দোষ দেব। বিভাগ 4d দেখুন

দেখতে 7.2.13 কঠোর সমতা তুলনা উপর স্পেসিফিকেশন
এই ঘটনাটি ব্যাখ্যা করার জন্য উইকিপিডিয়ায় একটি ভাল নিবন্ধ রয়েছে: http://en.wikedia.org/wiki/Sided_zero
সংক্ষেপে, এটি +0 এবং -0 উভয়ই আইইইই ভাসমান পয়েন্টের স্পেসিফিকেশনগুলিতে সংজ্ঞায়িত করা হয়। উভয়ই কোনও চিহ্ন ছাড়াই 0 থেকে প্রযুক্তিগতভাবে পৃথক, যা একটি পূর্ণসংখ্যা, তবে বাস্তবে তারা সকলেই শূন্যকে মূল্যায়ন করে, তাই সমস্ত ব্যবহারিক উদ্দেশ্যে এই পার্থক্যটিকে উপেক্ষা করা যেতে পারে।