Question

juste curieux! , mais je remarquai que la valeur de π détenue par SAS est en fait incorrecte.

par exemple:

data _null_;
x= constant('pi') * 1000000000000000000000000000;
put x= 32.;
run;

donne une valeur de π de (3.) 141592653589792961327005696

cependant - π bien sûr (3.) 1415926535897932384626433832795 ( http://www.joyofpi.com /pi.html ) - 31 dp

.

ce qui donne ?? !!

Était-ce utile?

La solution

magasins SAS PI comme une constante à 14 décimales. La différence que vous voyez est un artefact de flotter mathématiques moment où vous avez fait l'étape de multiplication.

data _null_;
    pi=constant("PI");
    put pi= 32.30;
run;

/ * On Log * /

pi=3.141592653589790000000000000000

Autres conseils

PI est maintenue comme une constante dans tous les langages de programmation à une précision de jeu. Il ne se calcule pas. Votre code expose à quel point précis PI est en SAS.

Vous avez 16 chiffres de précision. Ce qui signifie qu'il utilise probablement IEEE 754 double précision représentation à virgule flottante qui ne donne environ 16-17 chiffres décimaux de précision. Il est impossible pour π d'être représenté dans un nombre fini de chiffres, de sorte que toute représentation informatique va être tronqué à un certain nombre de chiffres. Il y a plusieurs façons de faire des calculs de précision arbitraire (Java a une classe BigDecimal), mais même alors, vous auriez à tronquer quelque part π. Et les mathématiques fait de cette façon est de plusieurs ordres de grandeur plus lente (car il n'est pas gérée par des instructions CPU directes).

Garry Shutler dit, il est tenu comme une constante. Notez que les valeurs que les petites fractions dans les types numériques de langages informatiques sont rarement tout ce que précise (en fait, leur précision peut être inférieure à leur précision), car ils sont stockés sous forme de très bonnes approximations qui peuvent être manipulées rapidement. Si vous avez besoin d'une excellente précision (comme dans les efforts financiers et scientifiques), vous devez utiliser des types spéciaux comme le BigDecimal Java qui gèrent être tout à fait exact (au détriment de la vitesse de calcul). (Désolé, ne savent pas SAS ne sais pas si d'un analogue pour BigDecimal.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top