21 वीं सदी सी पढ़ना मैं खंड 6 में "NaNs के साथ अंकन असाधारण संख्या" पर पहुंचा , जहां यह कुछ मनमाने ढंग से बिट पैटर्न को संग्रहीत करने के लिए मंटिसा में बिट्स के उपयोग की व्याख्या करता है, उन्हें मार्कर या बिंदुओं के रूप में उपयोग करने के लिए (पुस्तक में उल्लेख किया गया है) कि WebKit इस तकनीक का उपयोग करता है)।
मुझे वास्तव में यकीन नहीं है कि मैं इस तकनीक की उपयोगिता को समझ पाया हूं, कि मैं एक हैक के रूप में देखता हूं (यह एक एनएएन में मंटिसा के मूल्य पर ध्यान नहीं देने वाले हार्डवेयर पर निर्भर करता है) लेकिन एक जावा पृष्ठभूमि से आने के लिए मुझे उपयोग नहीं किया जाता है C का खुरदरापन।
यहां कोड का स्निपेट है जो एक NaN में एक मार्कर सेट और पढ़ता है
#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
और JSValue.h वेबकिट पर एन्कोडिंग की व्याख्या करता है, लेकिन इसका उपयोग क्यों नहीं किया जाता है।
इस तकनीक का उद्देश्य क्या है? क्या अंतरिक्ष / प्रदर्शन के लाभ इसकी हैकिश प्रकृति को संतुलित करने के लिए पर्याप्त हैं?