Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма с double 
V
    Опции темы
FREEDEV
Дата 4.5.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



Добрый день!
Возникла проблеммка с double. Операции умножения, деления приводят к появлению лишних знаков после запятой, например:
3*0.01 возвращает что, то вроде 0.030000001
5*0.02 = 0.0499999998
Немогу разобраться в чем дело, может кто встречался с подобным
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
jonie
Дата 4.5.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



дело в машинном представлении чисел с плавающей запятой в компьютере.
погугли, там все очень неплохо написано....
вкратце : потому что компьютер сохраняет число как 2^М


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
source777
Дата 4.5.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Интересно сколько миллионов раз этот вопрос задавался? smile 

P.S. FREEDEV, открой для себя округление...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Lycifer
Дата 5.5.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



округление хорошо ну вот если нужно посчитать точное значение?
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.5.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Округлять по-разному можно, например до 8-го знака после запятой.


--------------------
user posted image
PM MAIL WWW   Вверх
source777
Дата 5.5.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(Lycifer @  5.5.2008,  17:11 Найти цитируемый пост)
округление хорошо ну вот если нужно посчитать точное значение? 
Точные значения в обыкновенных дробях считаются, а не в десятичных, это ещё в 5-ом классе средней школы проходят, тут даже механизмы хранения вещественных чисел в памяти компьютера непричём...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
amarenkov
Дата 6.5.2008, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Цитата(Lycifer @  5.5.2008,  17:11 Найти цитируемый пост)
посчитать точное значение


Можно еще при расчетах использовать преобразование в другую систему счисления. В моем проекте, например, в одном месте из-за таких же проблем используются вычисления над 64-разрядными целыми числами. Правда это не я делал, но автор уверяет, что избавился от многих проблем smile.
PM MAIL ICQ   Вверх
Lycifer
Дата 6.5.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Нет округление не пойдёт, просто сдесь приведёт пример когда значение уменьшается(то и есть его нужно увеличить), бываю сдучаи года 123.00000017
послу огругления будем иметь 123.0000002, ну или 123.0000001, а когда прибавим 0.00000001 будет совсем другое значения вобщемто очень приблезительное, единственное что вижу, так это то что можно реализовать класс, но он будет совсем не производителен!!
PM MAIL ICQ   Вверх
Дрон
Дата 6.5.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Lycifer, используй тип decimal.

Это сообщение отредактировал(а) Дрон - 6.5.2008, 13:19


--------------------
Да. Именно так.
PM   Вверх
source777
Дата 6.5.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(Lycifer @  6.5.2008,  12:23 Найти цитируемый пост)
бываю сдучаи года 123.00000017
не бывает таких случаев, если ты их сам специально не создаёшь, так что не гони...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
mr.DUDA
Дата 6.5.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Дрон, только вот тормознутый он, этот decimal, жутко... smile

А так конечно если бывает что вылезет погрешность, нужно её округлять. Других вариантов нет, AFAIK.


--------------------
user posted image
PM MAIL WWW   Вверх
Дрон
Дата 6.5.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(mr.DUDA @  6.5.2008,  17:45 Найти цитируемый пост)
Дрон, только вот тормознутый он, этот decimal, жутко...

Ну так про требования к быстродействию автор ничего не сказал smile 

Это сообщение отредактировал(а) Дрон - 6.5.2008, 19:28


--------------------
Да. Именно так.
PM   Вверх
source777
Дата 6.5.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(mr.DUDA @  6.5.2008,  17:45 Найти цитируемый пост)
Других вариантов нет, AFAIK. 
Как же нет, я уже ещё 1 вариант назвал - вычисление в обычных дробях, так практически все математические пакеты поступают и никаких проблем с погрешностями не знают... другой вопрос, что это на много порядков более сложная задача, чем простое округление...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
jonie
Дата 6.5.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



не все числа представляются в виде обыкновенных дробей.... и такая задача становится еще сложнее)


и мат пакеты страдают порой и очень сильно от погрешности... сам один раз попал на это в матГаде.. тогда как Maple посчитал лучше (ну а руками так вообще хорошо посчиталось))....



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
source777
Дата 9.5.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(jonie @  6.5.2008,  23:30 Найти цитируемый пост)
и мат пакеты страдают порой и очень сильно от погрешности... сам один раз попал на это в матГаде.. тогда как Maple посчитал лучше (ну а руками так вообще хорошо посчиталось))....
Ну я Maple имел в виду, остальными я практически не пользуюсь... А Maple как раз на аналитических расчётах специализируется smile 

Цитата(jonie @  6.5.2008,  23:30 Найти цитируемый пост)
не все числа представляются в виде обыкновенных дробей....
теоретически все. Другое дело что число может представлять собой бесконечный ряд обыкновенных дробей и даже не один, а также в состав дробей могут входить любые арифметические операции(+ - * / ^), ну да ленивые вычисления никто не отменял...

P.S. Ну и в конечном итоге, можно посмотреть чему примерно равен полученный в виде громадной дроби результат, и тут за дело вновь берётся округление...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.