|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Применимость вещественных данныхПрименимость вещественных данных. Даже познакомившись с различиями в диапазонах представления вещественных чисел, начинающий программист не сразу осознает различия между типами float, double и long double. Сразу бросается в глаза разное количество байтов, отводимых в памяти для вещественных данных перечисленных типов. На IBM PC: • для float - 4 байта; • для double - 8 байт; • для long double - 10 байт. Обратив внимание на значения предельных констант, отмечают (см. Приложение 2), что максимальные значения, которые можно представить вещественными числами, определены константами: FLT_MAX приблизительно равно 1Е+37 (для float); DBL_MAX приблизительно равно 1Е+308 (для double). Затем обращают внимание на количество верных десятичных цифр в мантиссах: FLT_DIG равно 6 (для float); DBL_DIG равно 10 (для double). Наконец, оценят минимальные нормализованные числа: FLTJMIN приблизительно равно 1Е-37 (для float); DBL_MIN приблизительно равно 1Е-308 (для double). Можно и дальше продолжать сравнение констант, перечисленных в описании языка (см. Приложение 2), но нужно сделать выводы относительно применимости вещественных констант и переменных разных типов. По умолчанию все константы, не относящиеся к целым типам, принимают тип double. У программиста это соглашение часто вызывает недоумение - а не лучше ли всегда работать с вещественными данными типа float и только при необходимости переходить к double или long double? Ведь значения больше 1Е+38 и меньше 1Е-38 встречаются довольно редко. Следующая программа (предложена С.М. Лавреновым) иллюстрирует опасности, связанные с применением данных типа float даже в несложных арифметических выражениях: Результат выполнения программы: Если в той же программе переменной а присвоить значение 100.0, то результат будет еще хуже: c= 0.000000.
Таким образом, запрограммированное с использованием переменных типа float несложное алгебраическое выражение
никак "не хочет" вычисляться и принимать свое явное теоретическое единичное значение. Если заменить в программе только одну строку, т.е. так определить переменные:
значение выражения вычисляется совершенно точно:
Приведенный пример и общие положения вычислительнойматематики заставляют существенно ограничить применение переменных типа float. Тип float можно выбирать для представления исходных данных или окончательных результатов, получаемых в программе. Однако применение данных типа float в промежуточных вычислениях (особенно в итерационных алгоритмах) следует ограничить и всегда использовать double либо long double. К сожалению, ни double, ни long double не снимают полностью проблем конечной точности представления вещественных чисел в памяти ЭВМ. Существенное различие в порядках значений операндов арифметических выражений может привести к подобным некорректным результатам и при использовании типов double и long. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |