crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> погрешность чисел в doubleSpinBox
voipp
  опции профиля:
сообщение 14.11.2010, 1:00
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вообщем имеется у меня DoubleSpinBox.Переменной "a" присваивается значение из дабл спинбокса.Но это значение с погрешностью в 3 десятитысячных(или что-то типо того).Для меня это очень важно.Как добиться абcолютной точности?

Сообщение отредактировал voipp - 14.11.2010, 1:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2010, 1:17
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(voipp @ 14.11.2010, 4:00) *
Как добиться абcолютной точности?
в компьютерах - принципиально ни как.
нужно задаться некой точностью
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
voipp
  опции профиля:
сообщение 14.11.2010, 18:49
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


хорошо вопрос такой: как мне сделать так чтобы в переменной было значение без погрешности? Неужели никак?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 14.11.2010, 19:12
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


voipp,разные типы переменных дают разную точность после запятой,вообзе без погрешности конечно не будет,но если возьмешь правильный тип,то хорошую точность можно получить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.11.2010, 20:42
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(voipp @ 14.11.2010, 20:49) *
хорошо вопрос такой: как мне сделать так чтобы в переменной было значение без погрешности? Неужели никак?

хранить по возможности все исходные данные в виде целых чисел (далеко не всегда возможно)

например, вместо
double x=1/3;

хранить
int x_nom=1;
int x_den=3;

только зачем ? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
voipp
  опции профиля:
сообщение 14.11.2010, 20:48
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


у меня просто из doublespinbox в переменную заносится значение шага.Если шаг равен 0,2 то в переменной может хранится 0,199(9).И соответственно при вычислении количества шагов на отрезке я получаю неправильный результат.Нашел единственный выход: применять функцию ceil(x) (возвращает значение double, представляющее наименьшее целое, которое больше или равно x.).А если значение превышает истинное, то просто привожу его к int.Коряво, но иначе не могу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2010, 21:03
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(voipp @ 14.11.2010, 23:48) *
Если шаг равен 0,2 то в переменной может хранится 0,199(9)
это не понял.
В спинбоксе пользователь ввёл "0,2" а из него читается 0,199?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
voipp
  опции профиля:
сообщение 14.11.2010, 21:45
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


0,199(9) я имел ввиду 9 в периоде - 0,19999999...
Да, я в спинбоксе устанавливаю значение 0,2 а в переменную читается 0,19999...
Я пробовал менять тип данных переменной - float double.Но все равно погрешность возникает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2010, 22:41
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(voipp @ 15.11.2010, 1:45) *
0,2 а в переменную читается 0,19999...
вот это странно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 9:50