2017-05-05 1 views
1

NetCDF définit default fill values pour chaque type. Pour float et double, il utilise 9.9692099683868690e+36. Au début, je pensais que cela pourrait être la valeur maximale stockable dans un flotteur, mais ce serait 3.4028235e+38, à peu près un facteur 34 plus grand.Signification de la valeur de remplissage de secours NetCDFs pour les flottants, 9.9692099683868690e + 36?

Est-ce que le nombre choisi par NetCDF ont une signification, ou pourraient-ils aussi bien avoir pris un nombre aléatoire?

Répondre

0

Suggestion: Découvrez ce que le HEX est pour ce numéro. Comparez cela à d'autres utilisations possibles de la mémoire.

Dans une vieille machine, maintenant défunte, le remplissage pour la mémoire non assignée était un modèle binaire qui était simultanément un NaN, une instruction qui provoquerait une annulation, une mauvaise adresse, etc. Donc, peu importe comment vous "utilisé "Cette cellule en RAM, quelque chose de mauvais arriverait immédiatement.

+0

ressemble à l'hexagone est '0x7cf00000' (déterminée avec [cette méthode] (http://stackoverflow.com/a/23624284/974555)). – gerrit

1

question intéressante. Un nombre vraiment aléatoire n'aurait pas fonctionné, car il pourrait se situer dans la gamme des valeurs typiques de nombreuses variables, ce qui violerait les meilleures pratiques pour les valeurs de remplissage. C'est pourquoi la meilleure pratique consiste à choisir un nombre extrêmement grand en amplitude absolue, de sorte qu'il ne soit pas en conflit avec la plage dynamique de données valides. J'ai examiné les propriétés de NC_FILL_FLOAT et NC_FILL_DOUBLE une fois et n'ai rien trouvé de trop remarquable à leur sujet. Les placer égaux est logique, car les utilisateurs convertissent souvent entre float et double. Cela laisse donc la question de savoir quelle valeur unique choisir. Le choix optimal, à mon avis, serait le nombre le plus proche de NC_FLOAT_MAX (ou négatif de NC_FLOAT_MAX) qui avait un motif de bits pouvant être compressé. Puisque de nombreux ensembles de données sont remplis de valeurs manquantes, l'utilisation d'un nombre avec de longues chaînes continues de bits identiques permettrait à de tels ensembles de données d'être mieux compressés par la plupart des algorithmes. La compression DEFLATE d'un ensemble de données avec NC_FILL_FLOAT est assez bon, parce que DEFLATE est bon et NC_FILL_FLOAT en binaire est

9.9692099683868690e+36f = 0 1111100 111100000000000000000000 

Ils auraient pu choisir un nombre légèrement plus compressible, par exemple,

-2.3509885615147286E-38f = 10000000111111111111111111111111 

mais ils didn 't et je suis aussi curieux d'où vient NC_FILL_FLOAT.