3.2.6. "Неправильное" значение
3.2.6. "Неправильное" значение
Самый первый "подводный камень", на котором спотыкаются новички — это то, что вещественная переменная может получить не совсем то значение, которое ей присвоено. Рассмотрим это на простом примере (листинг 3.9, примеp WrongValue на компакт-диске).
Листинг 3.9. Пример присваивания "неправильного" вещественного значения
procedure TForm1.Button1Click(Sender: TObject);
var
R: Single;
begin
R:= 0.1;
Label1.Caption = FloatToStr(F);
end;
Что мы увидим, когда нажмем кнопку? Разумеется, не 0.1, иначе не было бы смысла писать этот пример. Мы увидим 0.100000001490116, т. е. расхождение в девятой значащей цифре. Из справки по Delphi мы знаем, что точность типа Single — 7–8 десятичных разряда, так что нас, по крайнем мере, никто не обманывает. В чем же причина? Просто число 0,1 не представимо в виде конечной двоичной дроби, оно равно 0,0(0011). И эта бесконечная двоичная дробь обрубается на 24-х знаках; мы получаем не 0,1, а некоторое приближенное число (какое именно — см. выше). А если мы присвоим переменной R не 0.1, а 0.5? Тогда мы получим на экране 0.5, потому что 0.5 предоставляется в виде конечной двоичной дроби. Немного поэкспериментировав с различными числами, мы заметим, что точно представляются те числа, которые выражаются в виде m/2n, где m, n — некоторые целые числа (разумеется, n не должно превышать 24, а то нам не хватит точности типа Single). В качестве упражнения предлагаем доказать, что любое целое число, для записи которого хватает 24-х двоичных разряда, может быть точно передано типом Single.
Примечание
Если в этом примере изменить тип переменной R с Single на Double или на Extended, на экран будет выведено 0.1. Но это не значит, что в переменную будет записано ровно 0.1 — это просто особенности работы функции FloatToStr, которая не учитывает столь малую разницу между 0,1 и переданным ей числом.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Идеальное значение параметра HZ
Идеальное значение параметра HZ Для аппаратной платформы i386, начиная с самых первых версий операционной системы Linux, значение частоты системного таймера было равно 100 Гц. Однако во время разработки ядер серии 2.5 это значение было увеличено до 1000 Гц, что (как всегда бывает в
(4.9) Как восстановить систему, если поставлено неправильное ядро?
(4.9) Как восстановить систему, если поставлено неправильное ядро? Так как система не загружается, придётся загрузиться либо с другой ОС, либо в recovery console от W2k. После этого останется извлечь нужное ядро из WindowsDriver Cachei386driver.cab, скопировать его с Windowssystem32, и переименовать его в
Значение errno
Значение errno При возникновении ошибки в функции Unix глобальной переменной errno присваивается положительное значение, указывающее на тип ошибки; при этом функция обычно возвращает значение –1. Наша функция err_sys выводит соответствующее коду ошибки сообщение (например, Resource
3.4.7. Неправильное поведение свойства Anchors
3.4.7. Неправильное поведение свойства Anchors Свойство Anchors, появившееся в Delphi 5, является очень удобным средством управления положением и размерами визуальных компонентов при изменении размера родителя. Однако в тех случаях, когда начальные размеры формы по каким-то
4.2.5. Значение освобождения
4.2.5. Значение освобождения В начале данной книги упоминалась ссылка на Дзэн об "особой передаче знаний вне священного писания". Не следует рассматривать ее как экзотическую, использованную ради стилистического эффекта. Основные понятия Unix всегда отличались свободной,
4.2.5. Значение освобождения
4.2.5. Значение освобождения В начале данной книги упоминалась ссылка на Дзэн об "особой передаче знаний вне священного писания". Не следует рассматривать ее как экзотическую, использованную ради стилистического эффекта. Основные понятия Unix всегда отличались свободной,
8.2.4. Удаление пар ключ-значение
8.2.4. Удаление пар ключ-значение Удалить пары ключ-значение из хэша можно с помощью методов clear, delete, delete_if, reject, reject! и shift.Метод clear удаляет из хэша все пары. Эффект такой же, как от присваивания переменной нового пустого хэша, но работает чуть быстрее.Метод shift удаляет
S.LOG: Неправильное цветоделение — 3. Продано
S.LOG: Неправильное цветоделение — 3. Продано Автор: Серж СкаутДля тех, кто /в зоне неуверенного приема/(зачеркнуто) не в курсе происходящего в этой рубрике в последние пару недель, на всякий случай сообщу: мы продолжаем /КВН/(зачеркнуто) обсуждать неправильное цветоделение
S.LOG: Неправильное цветоделение: Подготовить картинку для печати на белой бумаге сможет любой Photoshop. Но что делать, если бумага цветная?
S.LOG: Неправильное цветоделение: Подготовить картинку для печати на белой бумаге сможет любой Photoshop. Но что делать, если бумага цветная? Автор: Серж СкаутЛето в Москве. Лето — в Москве!!! Для того чтобы проводить его таким образом, тогда как все нормальные люди плещутся в
S.LOG: Неправильное цветоделение 2: Если бумага, на которой вы печатаете, темнее изображения — плесните белил
S.LOG: Неправильное цветоделение 2: Если бумага, на которой вы печатаете, темнее изображения — плесните белил Автор: Серж СкаутВ прошлый раз мы обсуждали, как решить проблему цветоделения, если нужно отпечатать картинку на цветной бумаге пастельных тонов, да так, чтобы и
Значение SAP R/3
Значение SAP R/3 В оставшейся части этой главы я опишу выдающиеся свойства и преимущества системы SAP R/3 как ERP-системы. Хотя это и не было предметом обсуждения в главе 2 «Оценка ERP» и главе 3 «Выбор ERP», после тщательной оценки и выбора ERP-системы станет ясно, что по всем критериям
14.5.2. Значение ячейки
14.5.2. Значение ячейки Как и в случае с Word, просто начинайте вводить текст или числа. Не беспокойтесь, что введенное вами значение выходит за рамки ячейки — это поправимо. Для изменения ширины ячейки ухватитесь за границу колонки и перемещайте ее, пока не измените размер
Значение void
Значение void Получить пустую ссылку достаточно просто - при инициализации по умолчанию все ссылки пусты. Однако удобно иметь специальное имя для ссылки, доступной в любом контексте и имеющей значение void . Предопределенный компонентVoidиграет эту роль.Обычно компонент Void
Ошибка 0x000000C2: неправильное выделение памяти
Ошибка 0x000000C2: неправильное выделение памяти Некорректное выделение памяти. Причина – некорректно работающий