Перейти к публикации
  • Сейчас на странице   Всего пользователей: 1   (0 пользователей, 1 гость)

Magot

погрешность дробных чисел

Рекомендованные сообщения

В процессе выполнения лабы по паскалю столкнулся с интересной особенностью представления чисел с плавающей точкой в памяти

Суть в том, что мне надо было считать из файла число. При считывании -9.1 в окошке дебаггера оно отображалось не как -9.1 а -9.0999999999999996.

Все бы ничего, если бы в квадрате оно не становилось равным 82.809999999999988, а мне нужно было вторая цифра после запятой, которая в данном случае равна 0, а на самом деле 1.

Но еще интереснее, что при выводе на экран или в файл, оно снова отображатеся как -9.1 и 82.81 соответственно.

 

У кого-нибудь есть мысли по этому поводу?

Поделиться сообщением


Ссылка на сообщение
Гость Thousand Master

доволи-таки странно) но на счет округлить хорошая идея...

ты в bdelphi или в tp пишешь лабу?

Поделиться сообщением


Ссылка на сообщение

почитай о представлении чисел с плавающей запятой, что такое мантисса, биас и тд, тогда поймешь.

И еще

2.0 - 1.0 != 1.0

И еще: запомните, никогда не сравнивайте числа с плавающей точкой(это самая частая ошибка). Для сравнения используйте погрешность:

a = 10.1;

b = 10.1;

if (a-b<0.0001)  <- эквивалент знака = для целых чисел


МАМА ВЯЖЕТ СВИТЕР

НАСТЯ ЛИЖЕТ КЛИТОР

ВЯЖЕТ СВИТЕР ЛИЖЕТ КЛИТОР

МЕЖДУ ДЕЛОМ ПИШЕТ В ТВИТОР

10751088108010731099hv7.gif

 

hidden

52424-093242-5e2c383e154bd4b09c5fc1e0adb9c00d.gif

моя Кая

Поделиться сообщением


Ссылка на сообщение

if (a-b<0.0001)  <- эквивалент знака = для целых чисел

Эту фишку еще чуть ли не в школе проходят :) Можно даж ввести спец константу для погрешности

А по сабжу не оч в курсе, но вроде в delphi такого нет.

Поделиться сообщением


Ссылка на сообщение

юзал бюлдер и не сталкивался с таким


Nesupermario... просто марио

Поделиться сообщением


Ссылка на сообщение

Все бы ничего, если бы в квадрате оно не становилось равным 82.09999999999988, а мне нужно было вторая цифра после запятой, которая в данном случае равна 0, а на самом деле 1.

Хм, по-моему вторая цифра тут 9 ???

дада, придираюсь, исправь на 82.80..........................

а по сабжу, DOS не очень любит отрицательные числа..

Поделиться сообщением


Ссылка на сообщение

Все бы ничего, если бы в квадрате оно не становилось равным 82.09999999999988, а мне нужно было вторая цифра после запятой, которая в данном случае равна 0, а на самом деле 1.

Хм, по-моему вторая цифра тут 9 ???

дада, придираюсь, исправь на 82.80..........................

а по сабжу, DOS не очень любит отрицательные числа..

 

google does not know anything 'bout it:

http://www.google.ru/search?complete=1&hl=ru&newwindow=1&q=%22DOS+does+not+love+negative+numbers%22&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq=

Поделиться сообщением


Ссылка на сообщение
Гость zebn

проходили в школе в 8 классе, прочитай про мантиссу

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

×
×
  • Создать...