Magot #1 Опубликовано: 29 сентября 2008 В процессе выполнения лабы по паскалю столкнулся с интересной особенностью представления чисел с плавающей точкой в памяти Суть в том, что мне надо было считать из файла число. При считывании -9.1 в окошке дебаггера оно отображалось не как -9.1 а -9.0999999999999996. Все бы ничего, если бы в квадрате оно не становилось равным 82.809999999999988, а мне нужно было вторая цифра после запятой, которая в данном случае равна 0, а на самом деле 1. Но еще интереснее, что при выводе на экран или в файл, оно снова отображатеся как -9.1 и 82.81 соответственно. У кого-нибудь есть мысли по этому поводу? Цитата Twitter Поделиться сообщением Ссылка на сообщение
rails #2 29 сентября 2008 округлять до нужной точности Цитата http://z0r.de/?id=179 Поделиться сообщением Ссылка на сообщение
Magot #3 29 сентября 2008 это ясно но почему так? Цитата Twitter Поделиться сообщением Ссылка на сообщение
Гость Thousand Master #4 29 сентября 2008 доволи-таки странно) но на счет округлить хорошая идея... ты в bdelphi или в tp пишешь лабу? Цитата Поделиться сообщением Ссылка на сообщение
Magot #5 29 сентября 2008 fpc в tp тооже самое Цитата Twitter Поделиться сообщением Ссылка на сообщение
Daft #6 29 сентября 2008 почитай о представлении чисел с плавающей запятой, что такое мантисса, биас и тд, тогда поймешь. И еще 2.0 - 1.0 != 1.0 И еще: запомните, никогда не сравнивайте числа с плавающей точкой(это самая частая ошибка). Для сравнения используйте погрешность: a = 10.1; b = 10.1; if (a-b<0.0001) <- эквивалент знака = для целых чисел Цитата МАМА ВЯЖЕТ СВИТЕРНАСТЯ ЛИЖЕТ КЛИТОРВЯЖЕТ СВИТЕР ЛИЖЕТ КЛИТОРМЕЖДУ ДЕЛОМ ПИШЕТ В ТВИТОР hidden моя Кая Поделиться сообщением Ссылка на сообщение
VVViper #7 29 сентября 2008 if (a-b<0.0001) <- эквивалент знака = для целых чисел Эту фишку еще чуть ли не в школе проходят :) Можно даж ввести спец константу для погрешности А по сабжу не оч в курсе, но вроде в delphi такого нет. Цитата Поделиться сообщением Ссылка на сообщение
XpoHuK #8 29 сентября 2008 это известная ошибка Цитата https://www.twitch.tv/alcorithm Поделиться сообщением Ссылка на сообщение
Gviskar #9 13 октября 2008 юзал бюлдер и не сталкивался с таким Цитата Nesupermario... просто марио Поделиться сообщением Ссылка на сообщение
tik_crazy #10 13 октября 2008 Все бы ничего, если бы в квадрате оно не становилось равным 82.09999999999988, а мне нужно было вторая цифра после запятой, которая в данном случае равна 0, а на самом деле 1. Хм, по-моему вторая цифра тут 9 ??? дада, придираюсь, исправь на 82.80.......................... а по сабжу, DOS не очень любит отрицательные числа.. Цитата Поделиться сообщением Ссылка на сообщение
XpoHuK #11 14 октября 2008 Все бы ничего, если бы в квадрате оно не становилось равным 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= Цитата https://www.twitch.tv/alcorithm Поделиться сообщением Ссылка на сообщение
Гость zebn #12 14 октября 2008 проходили в школе в 8 классе, прочитай про мантиссу Цитата Поделиться сообщением Ссылка на сообщение