Типы данных
Вещественная арифметика
Действительные числа представлены с определенной точностью.

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.

