Una representación en coma flotante de precisión simple/doble/extendida de Pi es exacta hasta cuántos lugares decimales?PI y precisión de un número de punto flotante
Respuesta
6 lugares y 14 lugares.1 lugar es más de 0 para el 3, y el último lugar aunque almacenado no puede considerarse como un punto de precisión.
Y lo siento, pero no sé lo que significa sin más contexto. ¿Te refieres al decimal de C#?
Consulte "Una descripción informal de IEEE754" http://www.cse.ttu.edu.tw/~jmchen/NM/refs/story754.pdf –
@Hrushikesh El enlace está muerto :(Pero he encontrado un [enlace de trabajo] (http://140.129.20.249 /~jmchen/NM/refs/story754.pdf). – fredoverflow
Imprime y cuenta, bebé, imprime y cuenta. (O leer el specs.)
#include <stdio.h>
#define E_PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
int main(int argc, char** argv)
{
long double pild = E_PI;
double pid = pild;
float pif = pid;
printf("%s\n%1.80f\n%1.80f\n%1.80Lf\n",
"3.14159265358979323846264338327950288419716939937510582097494459230781640628620899",
pif, pid, pild);
return 0;
}
Resultados:
[quassnoi #] gcc --version
gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)
[quassnoi #] ./test
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899
3.14159274101257324218750000000000000000000000000000000000000000000000000000000000
^
3.14159265358979311599796346854418516159057617187500000000000000000000000000000000
^
3.14159265358979311599796346854418516159057617187500000000000000000000000000000000
^
0000000001111111
123456789
World of PI tienen PI a 100.000.000.000 de dígitos, sólo podía imprimir y comparar. Para una versión un poco más fácil de leer Joy of PI tiene 10,000 dígitos. Y si quiere recordar los dígitos usted mismo, puede tratar de escribir el poema Cadaeic Cadenza.
Para el código C, consulte las definiciones en <float.h>
. Eso cubre float
(FLT_*
), double
(DBL_*
) y long double
(LDBL_*
) definiciones.
En la unidad de coma flotante x86 (x87) hay instrucciones para cargar ciertas constantes de coma flotante. "fldz" y "fld1" cargan 0.0 y 1.0 en el st superior de la pila (o st (0)) por ejemplo. Otro es "fldpi". Todos estos valores tienen una mantisa de 64 bits de longitud que se traduce en cerca de 20 dígitos decimales. Los 64 bits son posibles a través del formato de punto flotante tempreal de 80 bits utilizado internamente en el x87. El x87 también puede cargar tempreals y almacenarlos en ubicaciones de memoria de 10 bytes.
La precisión de un tipo de coma flotante es no relacionada con PI o con un número específico. Solo depende de cuántos dígitos se almacenan en la memoria.
En el caso de IEEE-754 float
utiliza 23 bits de mantisa por lo que puede tener una precisión de 23 + 1 bits de precisión, o ~ 7 dígitos de precisión en decimal. Similarmente double
(53 bit de mantisa) puede almacenar 15 ~ 17 dígitos decimales de precisión
Cuando examiné la respuesta de Quassnoi, me pareció sospechoso que el doble y el doble largos terminarían con la misma precisión, así que profundicé un poco. Si ejecuté su código compilado con clang obtuve los mismos resultados que él, sin embargo, encontré que si especificaba el sufijo doble largo y usaba un literal para inicializar el doble largo, proporcionaba más precisión. Aquí está mi versión de su código:
#include <stdio.h>
int main(int argc, char** argv)
{
long double pild = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899L;
double pid = pild;
float pif = pid;
printf("%s\n%1.80f\n%1.80f\n%1.80Lf\n",
"3.14159265358979323846264338327950288419716939937510582097494459230781640628620899",
pif, pid, pild);
return 0;
}
Y los resultados:
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899
3.14159274101257324218750000000000000000000000000000000000000000000000000000000000
^
3.14159265358979311599796346854418516159057617187500000000000000000000000000000000
^
3.14159265358979323851280895940618620443274267017841339111328125000000000000000000
^
Sin embargo, esto parece ser el compilador y la arquitectura dependientes: http://en.wikipedia.org/wiki/Long_double – thephred
nuevas funciones math.h __sinpi() y __cospi() fijado problema para mí para ángulos rectos como 90 grados y tal .
cos(M_PI * -90.0/180.0) returns 0.00000000000000006123233995736766
__cospi(-90.0/180.0) returns 0.0, as it should
/* __sinpi(x) returns the sine of pi times x; __cospi(x) and __tanpi(x) return
the cosine and tangent, respectively. These functions can produce a more
accurate answer than expressions of the form sin(M_PI * x) because they
avoid any loss of precision that results from rounding the result of the
multiplication M_PI * x. They may also be significantly more efficient in
some cases because the argument reduction for these functions is easier
to compute. Consult the man pages for edge case details. */
extern float __cospif(float) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
extern double __cospi(double) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
extern float __sinpif(float) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
extern double __sinpi(double) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
extern float __tanpif(float) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
extern double __tanpi(double) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
Puesto que hay ecuaciones de tamiz para representaciones binarias de pi, uno podría combinar variables para almacenar piezas del valor para aumentar la precisión.La única limitación a la precisión en este método es la conversión de binario a decimal, pero incluso los números racionales pueden tener problemas con eso.
- 1. ¿Tiene JavaScript precisión de número de punto flotante doble?
- 2. SQL establece la precisión de punto flotante
- 3. precisión de punto flotante en Visual C++
- 4. punto flotante de doble precisión en CUDA
- 5. Signo de un número de punto flotante
- 6. ¿Hay un sufijo literal en punto flotante en C++ para hacer un número doble de precisión?
- 7. ¿Limitar la precisión del punto flotante?
- 8. Reducción de rango Precisión pobre para punto flotante de precisión simple
- 9. ¿Precisión arbitraria de punto flotante de Python disponible?
- 10. ¿Cómo almacenar un número de punto flotante como texto sin perder precisión?
- 11. Formato del número de punto flotante
- 12. ¿Puede la precisión de punto flotante ser dependiente del hilo?
- 13. ¿Cuál es el siguiente número de punto flotante normalizado después de (antes) un número de punto flotante normalizado f?
- 14. Cómo determinar la precisión de Pi (π)
- 15. C++ pérdida de precisión en punto flotante: 3015/0.00025298219406977296
- 16. ¿Es PI un número computable?
- 17. Número de dígitos significativos para un tipo de punto flotante
- 18. Comparación de punto flotante irreproducibilidad
- 19. ¿Cuál es la resolución aproximada de un solo número de punto flotante de precisión cuando está alrededor de cero
- 20. ¿Qué define la precisión del punto flotante en python?
- 21. ¿Cómo configuro la precisión del punto flotante en Perl?
- 22. Precisión del punto flotante en la matriz Python
- 23. Límites de punto flotante
- 24. Mantenimiento de precisión de punto flotante con un promedio en ejecución
- 25. flotante de impresión, preservando la precisión
- 26. Formato de punto flotante Sphinx
- 27. Cómo truncar un número de punto flotante después de un cierto número de posiciones decimales (sin redondeo)?
- 28. Haskell: leer un número (entero o punto flotante)
- 29. Punto flotante determinista y .NET
- 30. División de guión y de punto flotante
Esto no se puede responder sin que usted indique qué idioma está usando y de dónde obtiene el PI? ¿Estás usando una constante o una función de biblioteca? –
O ¿te refieres a la base de datos de series de tiempo PI –
Es posible que desee consultar http://www.exploringbinary.com/pi-and-e-in-binary/ –