АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Применимость вещественных данных

Читайте также:
  1. Анализ данных.
  2. Анализ и интерпретация данных.
  3. Аудит электронной обработки данных. Контрольная среда.
  4. Аудит электронной обработки данных. Контрольная среда.
  5. Базовые понятия реляционной модели данных. Ключи. Неопределенные значения. Ссылочная целостность и способы ее поддержания. Атомарность атрибутов и 1НФ.
  6. Ввод данных.
  7. Вопрос о пригодности того или иного грунта для основания решают проводя анализ геологоразведочных данных.
  8. Выбор исходных данных.
  9. Глава 2. Основные навыками работы с базами данных.
  10. Задание 2 «Двумерный массив вещественных элементов»
  11. Методы криптографического преобразования данных.
  12. Многомерная обработка данных с использованием интегрированной системы Statistica. Корреляционный анализ данных.

Применимость вещественных данных. Даже познакомившись с различиями в диапазонах представления вещественных чисел, начинающий программист не сразу осознает различия между типами 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.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)