পড়া 21 শতকের সি আমি অধ্যায়ের 6 আগত অধ্যায় এ "Nans সঙ্গে ব্যতিক্রমী সংখ্যাসূচক মান চিহ্নিত" , যেখানে এটি অংশক বিট ব্যবহার ব্যাখ্যা করে, কিছু নির্বিচারে বিট নিদর্শন সংরক্ষণ করতে তাদের চিহ্নিতকারী বা পয়েন্টার (বই উল্লেখ হিসাবে ব্যবহার করার জন্য ওয়েবকিট এই কৌশলটি ব্যবহার করে)।
আমি এই কৌশলটির ইউটিলিটি বুঝতে পেরেছি বলে আমি সত্যই নিশ্চিত নই, আমি হ্যাক হিসাবে দেখছি (এটি একটি এনএএন-তে ম্যান্টিসার মান যত্নশীল নয় এমন হার্ডওয়ারের উপর নির্ভর করে) তবে জাভা ব্যাকগ্রাউন্ড থেকে আসছি আমি অভ্যস্ত নই সি এর রুক্ষতা
এখানে কোডের স্নিপেট যা কোনও এনএএন-তে চিহ্নিতকারীকে সেট করে এবং পড়ে reads
#include <stdio.h>
#include <math.h> //isnan
double ref;
double set_na(){
if (!ref) {
ref=0/0.;
char *cr = (char *)(&ref);
cr[2]='a';
}
return ref;
}
int is_na(double in){
if (!ref) return 0; //set_na was never called==>no NAs yet.
char *cc = (char *)(&in);
char *cr = (char *)(&ref);
for (int i=0; i< sizeof(double); i++)
if (cc[i] != cr[i]) return 0;
return 1;
}
int main(){
double x = set_na();
double y = x;
printf("Is x=set_na() NA? %i\n", is_na(x));
printf("Is x=set_na() NAN? %i\n", isnan(x));
printf("Is y=x NA? %i\n", is_na(y));
printf("Is 0/0 NA? %i\n", is_na(0/0.));
printf("Is 8 NA? %i\n", is_na(8));
}
এটি মুদ্রণ:
Is x=set_na() NA? 1
Is x=set_na() NAN? 1
Is y=x NA? 1
Is 0/0 NA? 0
Is 8 NA? 0
এবং জেএসভ্যালু। এ ওয়েবকিট এনকোডিংয়ের ব্যাখ্যা দেয়, তবে কেন এটি ব্যবহার করা হয় তা নয়।
এই কৌশলটির উদ্দেশ্য কী? স্থান / পারফরম্যান্সের সুবিধাগুলি কি এর হ্যাকিশ প্রকৃতির ভারসাম্য বজায় রাখার পক্ষে যথেষ্ট বেশি?