জেএস ইঞ্জিনগুলি কি কোনও NaN এর বিট পরিবর্তন করার অনুমতি দেয়?


12

জাভাস্ক্রিপ্টে, NaN মান অভ্যন্তরীণভাবে প্রশস্ত 64-বিট ডাবল দ্বারা উপস্থাপিত হতে পারে। বিশেষত, নিম্নলিখিত বিটওয়াইজ উপস্থাপনা সহ যে কোনও দ্বিগুণ:

x111 1111 1111 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

একটি এনএএন হিসাবে ব্যাখ্যা করা হয়। আমার প্রশ্নটি: ধরুন আমি অ্যারে বুফার্স ব্যবহার করে একটি জেএস নম্বরে দুটি 32-বিট ইউটি কাস্ট করেছি, এটিকে পাশ দিয়ে পাস করব, তারপরে এটি দুটি 32-বিট ইউটনে ফিরব। পুনরুদ্ধার করা বিটগুলি কি মূলের মতো হবে, বা জেএস ইঞ্জিনগুলি ইচ্ছামত কোনও এনএএন-এর বিট পরিবর্তন করার অনুমতি পাবে? অন্য কথায়, জেএস নম্বরগুলি লসলে 64৪-বিট সংরক্ষণ করতে ব্যবহার করা যেতে পারে?


2
আকর্ষণীয় ধারণা
এভার্ট

1
আমি একটি পরীক্ষা করেছি। অন্তত নোড.জেএস এর মতো মনে হয় বিটগুলি ইচ্ছামত পরিবর্তন করে, তথ্যের ক্ষতি করে।
মায়াভিক্টর

1
পাশে: এই জাতীয় প্রতিটি বিট প্যাটার্ন কোনও NaN উপস্থাপন করে না। যদি প্রথমগুলির পরে সমস্ত এক্স বুট শূন্য হয় তবে এটি একটি অনন্ততাকে উপস্থাপন করে।
এরিক পোস্টপিসিল

উত্তর:


6

ইসিএমএ-262 9 সংস্করণ, জুন 2018, (জাভাস্ক্রিপ্ট অনুসারে মানক করা) ).১..6 "দ্য টাইপ টাইপ" বলেছেন:

… 9007199254740990 (যে, 2 53 -2) আইইইই স্ট্যান্ডার্ডের স্বতন্ত্র "নন-অ-সংখ্যা" মানগুলি একক বিশেষ ন্যাশনাল মান হিসাবে ECMAScript এ উপস্থাপিত হয় ... কিছু প্রয়োগে, বাহ্যিক কোড কোনও পার্থক্য সনাক্ত করতে সক্ষম হতে পারে বিভিন্ন নন-অ-সংখ্যা মানের মধ্যে, তবে এই জাতীয় আচরণ বাস্তবায়ন-নির্ভর; ECMAScript কোডে, সমস্ত NaN মান একে অপরের থেকে পৃথক করা যায়।

24.1.17 "নাম্বারটো র্যাবাইটস (টাইপ, মান, #LittleEndian)" বলেছেন:

… মানটি যদি হয় তবে কাঁচাবাাইটগুলি আইইইই 754-2008 বাইনারি 64 বিন্যাস নং-এ-নম্বর এনকোডিংয়ে নির্বাচিত যে কোনও বাস্তবায়নে সেট করা যেতে পারে। একটি বাস্তবায়নের জন্য অবশ্যই প্রতিটি প্রয়োগের জন্য আলাদা আলাদা এনএন মানটি একই এনকোডিং চয়ন করতে পারে……

এই প্রশ্নটি আলোকিত করছে এমন NaN উল্লেখ করে এমন কোনও প্যাসেজ আমি দেখতে পাচ্ছি না। একদিকে, 24.1.17 কার্যকরভাবে আমাদের বলে যে কোনও এনএনের বিটগুলি যখন এনএএন কে কাঁচা বাইটে রূপান্তর করতে হবে তখন অবশ্যই সংরক্ষণ করতে হবে। তবে, বিটগুলি অন্য ক্রিয়াকলাপগুলিতে অবশ্যই সংরক্ষণ করতে হবে বলে আমাদের কাছে আর কিছুই দেখা যাচ্ছে না। কেউ অনুমান করতে পারে যে এটিই হ'ল উদ্দেশ্য, কারণ 24.1.17 এ এই প্রয়োজনটি কোনও উদ্দেশ্য কার্যকর করতে পারে যদি অন্য কোনও ক্রিয়াকলাপে বিটগুলি নির্বিচারে পরিবর্তন করা যায়। তবে আমি সেই উদ্দেশ্যটি অনুসারে এটি প্রয়োগ করতে জাভাস্ক্রিপ্ট বাস্তবায়নের উপর নির্ভর করব না।


1

জাভার জন্য আমি একবার এনএনএন মানগুলির হার্ডওয়্যার-নির্ভরতা সম্পর্কে একটি প্রশ্ন জিজ্ঞাসা করেছি এবং এটি লক্ষ্য করা গেছে যে কোনও সিএনইউ লোড হওয়ার পরে কিছু সিপিইউ চুপচাপ একটি "সিগন্যালিং এনএন" কে "শান্ত ন্যান" (শান্ত এনএন বিট সেট করে) রূপান্তর করবে will প্রসেসরের রেজিস্টারে। কমপক্ষে বিটগুলির মধ্যে একটি, শান্ত NaN বিট, আপনি স্বেচ্ছাচারিত তথ্য সংরক্ষণের জন্য ব্যবহার করতে পারবেন না।

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

এই ধরণের সমস্যা হ'ল স্বাভাবিক ভাষার ক্রিয়াকলাপগুলি কোনও NaN এর অভ্যন্তরীণ মানের উপর নির্ভর করে এমন কিছু করা থেকে বিরত থাকে এবং সমস্ত NaN কে "কেবল NaN" হিসাবে বিবেচনা করতে পছন্দ করে।


0

আসল আইইইই -754 স্ট্যান্ডার্ড ইচ্ছাকৃতভাবে একটি এনএএন এর বিটগুলি বাস্তবায়ন পর্যন্ত ছেড়ে দিয়েছে। এটি যেমন ইঙ্গিত সরবরাহ করে

আপনি যেখানে NaN তৈরি হয়েছিল তার মূল মেমরি ঠিকানা রাখতে পারেন।

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

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