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 ?? !!

¿Fue útil?

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.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top