21. Yüzyıl C'yi okumak Ben "NaNs ile Olağanüstü Sayısal Değerleri İşaretlemek" bölümündeki 6. bölüme geldim ; burada bazı rasgele bit modellerini depolamak, işaretçiler veya işaretçiler olarak kullanmak için mantisan bitlerinin kullanımını açıklıyor (kitaptan bahsediyor) Bu WebKit bu tekniği kullanır).
Bu tekniğin faydasını anladığımdan emin değilim, bir hack olarak görüyorum (bir NaN'deki mantisanın değerini önemsemeyen donanıma güveniyor) ama Java geçmişinden gelmiyorum C. pürüzlülüğü
İşte bir NaN'de bir işaretleyiciyi ayarlayan ve okuyan kod pasajı
#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));
}
yazdırır:
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
ve JSValue.h webkit'te kodlamayı açıklar, fakat neden kullanıldığını değil.
Bu tekniğin amacı nedir? Alanın / performansın faydaları, çılgınca doğasını dengelemek için yeterince yüksek mü?