Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Вещественный тип данных

Читайте также:
  1. MATHCAD. Ввод числовых и текстовых данных, 2-х и 3-х мерная графика.
  2. OLAP-технология и хранилище данных (ХД). Отличия ХД от базы данных. Классификация ХД. Технологические решения ХД. Программное обеспечение для разработки ХД.
  3. А какие методы сбора данных об ожиданиях потребителей лучше использовать малому предприятию?
  4. Актуальность защиты базы данных. Причины, вызывающие ее разрушение. Правовая охрана баз данных.
  5. Анализ данных методами кластеризации
  6. Анализ полученных данных.
  7. Анализ представленных данных Кравцовой Ларисы Викторовны
 

 

В Турбо Паскале имеется 5 вещественных типов: - Real (занимает 6 байт, диапазон от 2.9E-39 до 1.7E+38 по модулю, точность 11-12 значащих цифр) - Single(занимает 4 байта, диапазон от 1.5E-45 до 3.4E+38 по модулю, точность 7-8 значащих цифр) - Double(занимает 8 байт, диапазон от 5.0Е-324 до 1.7Е+308по модулю,точность 15-16 значащих цифр) - Extended (занимает 10 байт, диапазон от 3.4E-4932 до 1.1E+4932 по модулю, точность19-20 значащих цифр). - Comp(занимает 8 байт, диапазон от -9.2E-18 до 9.2E+18, хранятся точно, поскольку это целые числа) Вещественные типы являются упорядоченными, но не порядковыми. Операции над вещественными числами: сложение,вычитание, умножение, деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с числами: abs, sqr, sqrt, sin, cos и т.п. Вещественные числа хранятся неточно. Каждый из имеющихся вещественных типов гарантирует правильное хранение только определенного количества значащих цифр, их называют верными цифрами. С математической точки зрения, из за особенностей внутреннего представления речь идет об относительной погрешности. Неточности в хранении вещественных чисел могут привести к тому, что при вычитании близких чисел может произойти потеря значимости. Это же объясняет, почему следует избегать сравнения вещественных величин на точное равенство. ПРИМЕР: тип Single - хранится 7-8 знаков после десятичной точки, тип Double - 15-16, тип Extended - 19-20. program sravnenie; var x: single; y: double; z: extended; begin x:= 1/3; y:= 1/3; z:= abs(x-y); writeln('z=',z); end. Эта программа выдаст в результате число z=9.93410748106882E-0009. Обычно принято считать, что a=b, если выполняется условие abs(a-b)< P>

 

 

hisp, потому что вещественные числа нельзя сравнивать на "равно".
Чтобы было ясно, предлагаю выполнить вот этот код:

Код Delphi

    procedure TForm1.Button1Click(Sender: TObject); var A: Double; begin A:= 0.1; if A = 0.1 then ShowMessage('0.1 = 0.1') else ShowMessage('0.1 <> 0.1') ; end;  

В результате выполнения этого кода будет выведено сообщение: "0.1 <> 0.1". Это связано с погрешностью представления вещественных чисел в памяти компьютера. Число 0.1 не может быть представлено в виде конечной двоичной дроби. Поэтому младшие дробные разряды, которые не уместились в формат типа Extended будут отсечены. Затем, когда выполняется операция:
A:= 0.1;
Будут опять отсечены младшие разряды - согласно возможностям типа Double.
И когда будет выполняться сравнение:
if A = 0.1 then
произойдёт следующее: число, записанное в А будет приведено к типу Extended. При этом младшие дробные разряды, которые при этом добавятся, заполнятся нулями. Константа 0.1 тоже будет преобразована к типу Extended при этом никакие дробные разряды обнулены не будут. Поэтому окажется что левый операнд не равен правому операнду.
---
Поэтому, во-первых, желательно везде где возможно пользоваться типом Extended. Во вторых, даже если применять только Extended, при множественных вычислениях будет накапливаться погрешность связанная с точностью типа Extended. Поэтому сравнения вещественных чисел на "равно" надо заменить на сравнение на равно с заданной точностью. Например:

Код Delphi

    procedure TForm1.Button1Click(Sender: TObject); const //Погрешность представления чисел типа Double. Eps = 1e-15; var A: Double; begin A:= 0.1; if Abs(A - 0.1) <= Eps then ShowMessage('0.1 = 0.1') else ShowMessage('0.1 <> 0.1') ; end;  

Здесь уже ответ будет таким: "0.1 = 0.1".
Либо можно применять гуппу перегружаемых функций SameValue() из модуля Math:

Код Delphi

    uses Math;   procedure TForm1.Button1Click(Sender: TObject); var A: Double; begin A:= 0.1; if SameValue(A, 0.1) then ShowMessage('0.1 = 0.1') else ShowMessage('0.1 <> 0.1') ; end;  

В этом случае ответ тоже будет таким: "0.1 = 0.1".

 


Дата добавления: 2015-10-21; просмотров: 56 | Нарушение авторских прав


Читайте в этой же книге: Do something | One pint of used oil can cover one acre of water surface and kill sensitive marinecreatures. . . | Tips to Protect Children from Pesticide and Lead Poisonings | Eco-Friendly Tips |
<== предыдущая страница | следующая страница ==>
Прямые природоохранные мероприятия их место и значение в экологизации экономики.| Сравнение вещественных примитивов

mybiblioteka.su - 2015-2024 год. (0.006 сек.)