¿Cómo se calcula π dentro sas?
Pregunta
curiosidad! pero vi que el valor de π en poder de SAS es de hecho incorrecto.
por ejemplo:
data _null_;
x= constant('pi') * 1000000000000000000000000000;
put x= 32.;
run;
da un valor π de (3.) 141592653589792961327005696
sin embargo - π es, por supuesto (3.) 1415926535897932384626433832795 ( http://www.joyofpi.com /pi.html ) - a 31 dp
.lo que da ?? !!
Solución
SAS tiendas de PI como una constante a 14 cifras decimales. La diferencia que está viendo es un artefacto de la aritmética de punto flotante cuando realizó la etapa de multiplicación.
data _null_;
pi=constant("PI");
put pi= 32.30;
run;
/ * En Registro * /
pi=3.141592653589790000000000000000
Otros consejos
PI se mantiene como una constante en todos los lenguajes de programación a una precisión de ajuste. No se calcula. Su código sólo expone cómo es exacto es PI en el SAS.
Tienes 16 dígitos de precisión. Lo que significa que probablemente utiliza un href="http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers" rel="nofollow de punto flotante IEEE representación 754 de doble precisión, lo cual sólo da unos 16-17 dígitos decimales de precisión. Es imposible que π a ser representado en un número finito de dígitos, por lo que cualquier representación por ordenador va a ser truncado en un número de dígitos. Hay maneras de hacer las matemáticas de precisión arbitraria (Java tiene una clase BigDecimal), pero incluso entonces tendría que truncar π en alguna parte. Y matemáticas hecho de esa manera es varios órdenes de magnitud más lento (ya que no es manejado por instrucciones directas de la CPU).
Como dijo Garry Shutler, se mantuvo como una constante. Tenga en cuenta que que los pequeños valores fraccionarios en los tipos numéricos de los lenguajes de programación rara vez son todo lo que precisa (de hecho, su exactitud puede ser inferior a su precisión), porque están almacenados como muy buenas aproximaciones que pueden ser manipulados de forma rápida. Si necesita una excelente precisión (como en los esfuerzos financieros y científicos), es necesario utilizar tipos especiales como BigDecimal
de Java que manejar ser completamente exacta (a costa de la velocidad de cálculo). (Lo siento, no sé SAS así que no sé de un análogo de BigDecimal
.)