Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
современный фортран , Бортеньев.pdf
Скачиваний:
242
Добавлен:
26.03.2015
Размер:
2.34 Mб
Скачать

6. Встроенные процедуры

REAL(4) или COMPLEX(4)

6

 

 

REAL(8) или COMPLEX(8)

15

 

 

RADIX(x) - для целого или вещественного x возвращает стандартное целое, равное основанию системы счисления, используемой для представления чисел. Например:

print *, radix(0.0)

!

2

RANGE(x) - для целого, вещественного или комплексного x возвращает эквивалентный десятичный степенной диапазон значений x, т. е.

INT(LOG10(huge))

для целого и

INT(MIN(LOG10(huge), -LOG10(tiny)))

для вещественного или комплексного x, где huge и tiny - наибольшее и наименьшее числа в соответствующих разновидностях типа. Результат функции - стандартного целого типа.

Тип параметра x

RANGE(x)

 

 

INTEGER(1)

2

 

 

INTEGER(2)

4

 

 

INTEGER(4)

9

 

 

REAL(4) или COMPLEX(4)

37

 

 

REAL(8) или COMPLEX(8)

307

 

 

TINY(x) - для вещественного x возвращает наименьшее положительное значение x, т. е. 2Emin . Тип и параметр типа результата такие же, как у x.

Тип параметра x

TINY(x)

 

 

REAL(4)

1.175494E-38

REAL(8)

2.225073858507201E-308

 

 

6.12. Элементные функции получения данных о компонентах представления вещественных чисел

Функции такого рода возвращают значение, связанное с компонентами модельного представления фактического значения аргумента.

EXPONENT(x) - возвращает степенную часть (т. е. порядок E) двоичного представления заданного вещественного x. Результат - стандартного целого типа. Результат равен нулю, если x = 0. Например:

real(4) :: r1 = 1.0, r2 = 123456.7

real(8) :: r3 = 1.0d0, r4 = 123456789123456.7

189

О. В. Бартеньев. Современный ФОРТРАН

write(*,*) exponent(r1)

!

1

write(*,*) exponent(r2)

!

17

write(*,*) exponent(r3)

!

1

write(*,*) exponent(r4)

!

47

FRACTION(x) - возвращает мантиссу - дробную часть двоичного представления x, т. е. 2E x . Тип x - вещественный. Тип и разновидность типа результата такие же, как у x.

Например:

print *, fraction(3.0)

!

0.75

print *, fraction(1024.0)

!

0.5

NEAREST(x, s) - возвращает вещественное значение с таким же параметром типа, как у x, равное ближайшему к x машинному числу, большему x, если s > 0, и меньшему x, если s < 0; s не может равняться нулю. Например:

real(4) :: r1 = 3.0 real(8) :: r2 = 3.0_8

! Используем для вывода шестнадцатеричную систему счисления

write(*, '(1x,z18)') nearest (r1, 2.0)

! 40400001

write(*, '(1x,z18)') nearest (r1, -2.0)

! 403FFFFF

write(*, '(1x,z18)') nearest (r2, 2.0_8)

!4008000000000001

write(*, '(1x,z18)') nearest (r2, -2.0_8)

!4007FFFFFFFFFFFF

Замечание. Числа с плавающей точкой между нулем и HUGE(x) распределены неравномерно. В случае REAL(4) между каждыми соседними степенями двойки находится примерно 222 чисел с плавающей точкой. Так, примерно 222 чисел находится между 2-125 и 2-124 и столько же между 2124 и 2125. Простое сопоставление говорит о том, что числа с плавающей точкой гуще расположены вблизи нуля.

RRSPACING(x) - возвращает вещественное значение с таким же параметром типа, как у x, равное обратной величине относительного расстояния между числами в двоичном представлении x, в области, близкой

к x, т. е. 2P 2E x .

print *, rrspacing( 3.0_4)

!

1.258291e+07

print *, rrspacing(-3.0_4)

!

1.258291e+07

SCALE(x, i) - возвращает вещественное значение с таким же параметром типа, как у x, равное 2i x , где i - целое число.

print *, scale(5.2, 2)

!

20.800000

SET_EXPONENT(x, i) - возвращает вещественное значение с таким же параметром типа, как у x, равное 2iE x , где i - целое число, а E = EXPONENT(x).

190