Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > VB .NET > математические операции |
Автор: flamingo 4.7.2007, 10:20 |
подскажите пожалуйста как в vb.net поделить числа с плавающей точкой? такой вопрос можно услышать только от новичка; кем я и являюсь)) элементарное выражение 0.1/0.1 считается не правильно. в обычном vb все считается; а тут нет. конечно; я открываю vb.net не для того чтобы это посчитать, для этого есть калькулятор![]() ![]() |
Автор: flamingo 4.7.2007, 23:58 |
меня вчера переклинило ![]() не сидите ночами за кодами, элементарных вещей не замечаешь на n-ый час ![]() |
Автор: Naum 5.7.2007, 18:50 | ||
Меня, кстати, тоже интересует подобный вопрос (в VB6 такого точно не было). Допустим, у нас есть win-форма, на ней кнопка. Добавляем в обработчик клика по кнопке следующий код
Запускаем. Нажимаем на кнопочку. И в заголовке формы видим не 6 (как ожидалось), а 5,99999999999999. Почему так? И как бороться с такой, ИМХО, довольно большой погрешностью? |
Автор: Дрон 7.7.2007, 08:30 | ||
Naum, это уже, наверно, много раз обсуждалось. Но в кратце: тип double (а тем более single) действительно имеет погрешность, появляющуюся при переводе из внутреннего формата в десятичный (тот который мы читаем). Почти как с бесконечными дробями вроде 1/3, которые нельзя точно представить в десятичном виде. Это связано с тем, что в машине существует конечное множество значений допустимых для double на каком-то интервале, а в математике считается, что вещественных чисел бесконечное много на любом интервале. Ну и, наконец, особенно хорошо эта погрешность действительна заметна после вычислений в циклах, так как уже изначально тот 0.1, который ты суммируешь, получает некоторую погрешность при переводе в double и там она накапливается. Из-за всего этого возникает неприятная проблема при сранении чисел с плавающей точкой на равенство. В твоём примере сравнение
по идее уже не сработает. Вывод? 1) Быть аккуратным с плавающей точкой. 2) Если нужны точные вычисления, то использовать тип decimal (вроде в VB6 был подобный тип под названием money или как-то так) |
Автор: An124 21.2.2008, 17:31 |
А не пробывали For i=0 to 60 или есть какая то проблема с этим? |
Автор: Exception 22.2.2008, 22:26 |
При чём тут это? И вообще, не надо старые темы откапывать. |