Типы данных
Вещественная арифметика
Действительные числа представлены с определенной точностью.
![a + (b+c) \ne (a+b) + c\\
(a+b)^2 \ne a^2+2ab+b^2](/sites/default/files/tex_cache/0f5cdb09ebc331bc0ce381e4c4a0b7b6.png)
a = 1.0/3; b = 4.0/7 write(*,*) (a+b)**2 ! 0.8185941 write(*,*) a**2+2*a*b+b**2 ! 0.8185942
Не рекомендуется сравнивать на равенство вещественные числа!
Переход от типа с меньшей точности к большей может привести к погрешности.
program lost_precision real(4) :: a = 1.03 real(8) b b = a write(*,*) "a = ", a ! 1.030000 write(*,*) "b = ", b ! 1.02999997138977 end
Не следует использовать в одном выражении значения, различие между которыми превышает число значащих цифр.
program arifm real(4) :: a = 1.E+10, b = -1.E+10, c = 5.0 write(*,*) a+b+c ! 5.000000 write(*,*) a+c+b ! 0.0000000E+00 end
Деление вещественного числа на нуль – бесконечность.
real(4) a,b a = 1.0/0.0 ! результат Infinity b = -1.0/0.0 ! -Infinity
Результат Nan "нет числа" – недопустимый результат.
real(4) a,b a = (-2.0)**0.34 ! Nan b = asin(2.0) ! Nan
Логическая функция IsNan(x) проверки на значение Nan.
Смешанная арифметика
Автоматическое приведение типов по схемам
"целый -> вещественный -> комплексный"
"от меньшей разрядности -> к большей"
Исключение – операция возведение в степень.
Запись 2**5 равносильна 2*2*2*2*2 2**5.0 равносильна exp(5.0*ln(2.0))
Преобразование типов может приводить к появлению погрешности !
Снижение погрешности
- Не вычитайте близкие числа.
- Не делите большие по модулю числа на малые.
- Сложение (вычитание) длинной последовательности чисел начинайте с меньших чисел.
- Уменьшайте число операций.
- Используйте алгоритмы, для которых известны оценки ошибок.
- Не сравнивайте на равенство вещественные числа.
Арифметические выражения
Используйте дополнительные переменные для повышения читаемости кода программы.
Математические процедуры
Описание | Имя |
---|---|
![]() |
sqrt(x) |
![]() |
abs(x) |
![]() |
exp(x) |
ln x | log(x) |
lg x | log10(x) |
shx | sinh(x) |
chx | cosh(x) |
thx | tanh(x) |
Im(z) | animag(x) |
Re(z) | real(z) |
![]() |
abs(z) |
сопряжение | conjg(z) |
остаток | mod(a,b) |
abs(a)умноженное на знак b | sign(a,b) |
округление ![]() |
floor(x) |
округление ![]() |
ceiling(x) |
максимум | max(x1,…) |
минимум | min(x1,…) |
max(x-y,0) | dim(x,y) |
радианы | |
sin (x) | |
cos(x) | |
tg x | tan (x) |
ctg x | cotan (x) |
arcsin x | asin (x) |
arccos x | acos (x) |
arctg x | atan (x) |
arctg(y/x) | atan2 (y,x) |
градусы | |
sind (x) | |
cosd(x) | |
tg x | tand (x) |
arcsin x | asind (x) |
arccos x | acosd (x) |
arctg x | atand (x) |
arctg(y/x) | atan2d (y,x) |
* Полный перечень, тип результата, тип аргумента и подробное описание функций см. HELP.