21 세기 C를 읽으 면서 나는 6 장 "NaN을 사용하여 예외적 인 숫자 값 표시" 섹션에 도착했습니다 . 여기에서 가수의 비트를 사용하여 임의의 비트 패턴을 저장하고이를 마커 또는 포인터로 사용하는 방법에 대해 설명합니다 (도서 언급) WebKit은이 기술을 사용합니다).
나는이 기술의 유용성을 이해하지 못했다. 나는 해킹 (NaN의 가수 가치에 신경 쓰지 않는 하드웨어에 의존하지만)은 내가 익숙하지 않은 Java 배경에서 온 것으로 보인다. 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의 웹킷 인코딩을 설명하고 있지만 사용되는없는 이유.
이 기술의 목적은 무엇입니까? 공간 / 성능의 이점이 해킹 특성의 균형을 잡을만큼 충분히 높습니까?