¿Es posible obtener más de 16 dígitos con double
de precisión sin usar quadruple
? Si es posible, ¿depende del compilador o de algo más? Porque sé que alguien dijo que estaba trabajando con precisión double
y tenía 22 dígitos de precisión.Doble precisión extendida
Respuesta
El tipo de datos double precision
se deriva de Fortran 77, y el único requisito para ese tipo es que tiene más precisión que real
. No deberías usar eso más.
En Fortran 90/95 y versiones posteriores, se admiten al menos dos tamaños de números reales. La precisión está determinada por el parámetro kind
, cuyo valor depende del compilador.
real(kind=8) :: a, b
tener una forma portátil de definir la precisión, se puede obtener un valor kind
que permite una cierta precisión mediante el uso de:
integer, parameter :: long_double = SELECTED_REAL_KIND(22)
entonces se puede declarar sus variables como
real(kind=long_double) :: a, b
pero no es seguro que su compilador admita esa precisión, en cuyo caso la función SELECTED_REAL_KIND
devolverá un número negativo.
ver también this post
Como los primeros estados de respuesta, la forma más portátil es para especificar la precisión del número es el uso de las funciones intrínsecas. El concepto de diseño del lenguaje es que averigüe qué precisión se requiere para su cálculo y lo solicita, y el compilador proporciona esa precisión o mejor. Por ejemplo, si calcula que su solución de ecuación diferencial es estable con 11 cifras decimales, entonces solicita este valor y el compilador proporciona el mejor tipo que cumpla con sus requisitos. Este es un enfoque extranjero para la mayoría de los programadores, que están acostumbrados a pensar cuáles son las pocas opciones que ofrece el hardware en lugar de lo que necesitan, y tal vez no tan fácil ya que pocos de nosotros somos analistas numéricos.
Si desea utilizar el SELECTED_REAL_KIND intrínseco y optimizar para su compilador y hardware en particular, es posible que desee experimentar. Algunas combinaciones proporcionarán precisión cuadrupolar en el software, que será lenta. Un compilador que tenga precisión doble y una precisión extendida de 10 bytes proporcionará ese tipo más largo mediante selected_real_kind (17). Un compilador que tenga precisión doble y precisión cuádruple pero no una precisión extendida de 10 bytes proporcionará precisión de cuadrupolo mediante selected_real_kind (17) o selected_real_kind (32). (No conozco ningún compilador que admita tanto 10-bytes extendidos como cuadripolo). El compilador que carece de precisión cuadripolar devolverá -1 para selected_real_kind (32).
- 1. doble substracción tema precisión
- 2. C# Alta precisión doble
- 3. doble menos doble dando problemas de precisión
- 4. iPhone/iPad doble precisión matemática
- 5. 'sprintf': doble precisión en C
- 6. C# Problema de precisión doble
- 7. Impresión doble sin perder precisión
- 8. Precisión de la multiplicación de doble precisión en java?
- 9. cómo detectar si el doble largo es de precisión extendida o no está en tiempo de compilación
- 10. formato de doble precisión en PostgreSQL
- 11. SSE2: Doble función de registro de precisión
- 12. Precisión del doble después del punto decimal
- 13. punto flotante de doble precisión en CUDA
- 14. Pérdida de precisión con doble C++
- 15. Compare doble en VBA problema precisión
- 16. Ayuda en la adición de doble precisión
- 17. problemas de doble precisión en .NET
- 18. ¿Todos los números de precisión simple son representables en el formato de precisión doble?
- 19. lectura formato de doble precisión FORTRAN en Python
- 20. C# pérdida de precisión de doble a decimal
- 21. de Java de doble precisión con la constante multiplicación/división
- 22. ¿Tiene JavaScript precisión de número de punto flotante doble?
- 23. Cómo convertir a doble con 2 precisión - cadena tras punto?
- 24. QString :: toDouble() dándome el doble con la precisión incorrecta
- 25. perdiendo la conversión de precisión de BigDecimal java a doble
- 26. próximo más alto/más bajo IEEE precisión doble número
- 27. PI y precisión de un número de punto flotante
- 28. OpenSessionInView vs PersistentContext (Extendida)
- 29. Declaración PDO extendida Clase
- 30. PHP - __construct extendida
Pero usted escribió 'entero '. ¿Podría solo 'entero 'tener 22 dígitos no' doble'? – Shibli
'long_double' es un número entero que se utiliza para indicar el' tipo' de las variables 'reales' 'a' y' b' de manera que tengan al menos precisión 22 – steabert
@Shibli También suele ser útil obtener los tipos de flota de precisión simple y doble en su sistema de manera portátil. Para esto uno puede usar 'integer, parameter :: sp = kind (1.e0)' y 'integer, parameter :: dp = kind (1.d0)'. A continuación, puede declarar una flotación de doble precisión como 'real (kind = dp) :: double'. – Chris