Возможно ли получить более 16 цифр с точностью double
без использования quadruple
? Если это возможно, зависит ли он от компилятора или чего-то еще? Потому что я знаю, что кто-то сказал, что он работает с точностью double
и имеет 22-значную точность.Расширенная двойная точность
ответ
Тип данных double precision
Стебли из Fortran 77, и единственным требованием для этого типа является то, что имеет большую точность, чем real
. Вы больше не должны этого использовать.
В Fortran 90/95 и более, поддерживаются по крайней мере два размера реальных чисел. Точность определяется параметром kind
, значение которого зависит от компилятора.
real(kind=8) :: a, b
Чтобы иметь переносимый способ определения точности, вы можете получить значение kind
, что позволяет определенную точность при использовании:
integer, parameter :: long_double = SELECTED_REAL_KIND(22)
то вы можете объявлять переменные как
real(kind=long_double) :: a, b
, но не уверен, что ваш компилятор будет поддерживать эту точность, и в этом случае функция SELECTED_REAL_KIND
вернет отрицательное число.
смотри также this post
В качестве первых состояний ответа, самый портативный способ, чтобы указать точность числа, чтобы использовать встроенные функции. Концепция дизайна языка заключается в том, что вы определяете, какая точность требуется для вашего расчета и запрашивает его, а компилятор обеспечивает эту точность или лучше. Например, если вы подсчитаете, что ваше решение дифференциального уравнения стабильно с 11 десятичными цифрами, вы запрашиваете это значение, а компилятор обеспечивает наилучший тип, отвечающий вашим требованиям. Это иностранный подход к большинству программистов, которые привыкли думать о том, что несколько вариантов предоставляют аппаратные средства, а не то, что им нужно, и, может быть, не так просто, поскольку немногие из нас являются численными аналитиками.
Если вы хотите использовать встроенный SELECTED_REAL_KIND и оптимизировать его для вашего конкретного компилятора и оборудования, вы можете поэкспериментировать. Некоторые комбинации обеспечат квадрупольную точность в программном обеспечении, которая будет медленной. Компилятор с двойной точностью и 10-байтовой расширенной точностью обеспечит более длинный тип с помощью selected_real_kind (17). Компилятор с двойной точностью и четкой точностью, но не с 10-кратной расширенной точностью обеспечит точность квадруполя через selected_real_kind (17) или selected_real_kind (32). (Я не знаю какого-либо компилятора, который поддерживает как 10-байтные расширенные, так и квадрупольные.) Компилятор, которому не хватает точности квадруполя, вернет -1 для selected_real_kind (32).
- 1. Двойная точность
- 2. Двойная точность?
- 3. функция корр (двойная точность, двойная точность) не существует - PostgresSQL
- 4. Двойная точность в Fortran
- 5. C# Высокая двойная точность
- 6. Двойная точность потеряна
- 7. Двойная точность - максимальное значение
- 8. Плавающая арифметика и двойная точность?
- 9. FFTW и длинная двойная точность
- 10. Высокая мощность и двойная точность
- 11. Двойная точность: умножение больших чисел
- 12. Двойная точность в функции FORMAT
- 13. Двойная точность странного поведения. Необходимость объяснения
- 14. двойная точность и десятичные знаки перидока
- 15. Postgres - оператор не существует: двойная точность ~~ неизвестной
- 16. fermi cuda двойная точность против C
- 17. Поплавок и двойная точность в C#
- 18. Поплавок и двойная точность в C
- 19. Двойная точность с плавающей точкой в Java
- 20. Точная двойная точность путем правильного округления
- 21. Двойная точность числа месяцев между датами postgres
- 22. Поплавковая и двойная точность в тригонометрических функциях
- 23. О x87 Точность FPU
- 24. Расширенная точность с плавающей запятой на мобильном GPU
- 25. Двойная точность, когда значение с плавающей точкой передается двойным
- 26. Двойная точность - MS visual C++ 2005 Vs Matlab
- 27. Числа с плавающей запятой «float» Python и «двойная точность» PostgreSQL
- 28. В MATLAB переменные ДЕЙСТВИТЕЛЬНО двойная точность по умолчанию?
- 29. OpenCL двойная точность отличается от двойной точности CPU
- 30. PG :: Ошибка: ОШИБКА: оператор не существует: двойная точность = булево
Но вы написали 'integer'. Может ли только «целое» иметь 22 цифры, а не «double»? – Shibli
'long_double' - это целое число, которое используется для обозначения' вида' 'реальных' переменных' a' и 'b', так что они имеют как минимум точность 22 – steabert
@Shibli. Также часто бывает полезно получить виды одиночная и двойная точность плавает на вашей системе в переносном режиме. Для этого можно использовать 'integer, parameter :: sp = kind (1.e0)' и 'integer, parameter :: dp = kind (1.d0)'. Затем вы можете объявить float с двойной точностью как 'real (kind = dp) :: double'. – Chris