2017-05-05 10 views
1

NetCDF는 각 유형에 대해 default fill values을 정의합니다. float 및 double의 경우 9.9692099683868690e+36을 사용합니다. 처음에는 그 값이 플로트에 저장할 수있는 최대 값일 수 있다고 생각했지만, 그 값은 3.4028235e+38으로 대략 34 배 더 큽니다.float에 대한 NetCDF 대체 값의 의미, 9.9692099683868690e + 36?

NetCDF으로 선택한 번호가 임의의 숫자를 갖습니까? 아니면 난수를 취했습니까?

답변

0

제안 : 해당 번호에 대한 16 진수를 찾으십시오. 다른 가능한 메모리 사용과 비교하십시오.

메모리가없는 오래된 컴퓨터에서 할당되지 않은 메모리의 필러는 동시에 NaN, 중단, 잘못된 주소 등을 초래하는 명령이었던 비트 패턴이었습니다. 따라서 사용 방법에 관계없이 "RAM에있는 셀, 뭔가 나쁜 일이 바로 일어날 것입니다.

+0

16 진수는 0x7cf00000입니다 ([this method] (http://stackoverflow.com/a/23624284/974555)로 확인). – gerrit

1

흥미로운 질문입니다. 채우기 값에 대한 모범 사례를 위반하는 많은 변수의 일반적인 값 범위에있을 수 있기 때문에 진정으로 임의의 숫자는 효과가 없었을 것입니다. 따라서 절대 값이 매우 큰 숫자를 선택하는 것이 가장 좋은 방법이므로 유효 데이터의 동적 범위와 충돌하지 않습니다. NC_FILL_FLOAT 및 NC_FILL_DOUBLE의 속성을 한 번 검사 한 결과 너무 주목할만한 점이 없습니다. 사용자가 종종 float과 double 사이를 변환하기 때문에 이들을 동일하게 설정하는 것이 좋습니다. 그래서 어떤 단일 가치를 선택할 것인가에 대한 의문을 남깁니다. 최적의 선택은, 내 의견으로는 압축에 적합한 비트 패턴을 가진 NC_FLOAT_MAX (또는 NC_FLOAT_MAX의 음수)에 가까운 숫자입니다. 많은 데이터 세트가 누락 된 값으로 가득 차 있기 때문에 동일한 비트의 긴 연속 문자열을 갖는 숫자를 사용하면 이러한 데이터 세트가 대부분의 알고리즘에 의해 더 잘 압축 될 수 있습니다. DEFLATE 좋은 이진의 NC_FILL_FLOAT이

9.9692099683868690e+36f = 0 1111100 111100000000000000000000 
그들은 약간 더 압축 수를 선택한 수

, 예를 들어,

-2.3509885615147286E-38f = 10000000111111111111111111111111 

하지만 그들은 didn를하기 때문에 NC_FILL_FLOAT와 데이터 세트의 DEFLATE 압축, 꽤 좋은 't 그리고 NC_FILL_FLOAT가 어디서 왔는지 궁금합니다.