Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Увеличить-уменьшить на величину машинной ошибки, старый прибор привередлив к вводу 
:(
    Опции темы
_Y_
Дата 30.3.2012, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Возникла задача увеличения-уменьшения значения single или double на величину машинной ошибки. Есть ли какие-то разумные варианты такого действия? А то что-то у меня, кроме попыток-сравнений в цикле, ничего в голову не приходит.

Интересует подход без привязки к языку т.к. язык у меня экзотический в этом форуме не встречающийся.

============================
Для интересующихся - описание мегазадачи: 

Имеется старый прибор, которому надо установить некий параметр. Парамерт - величина с плавающей точкой, но прибор берет не любое значение, а одно из набора возможных (например 50 или 30 или 12,15 или 0,35 но никак не промежуточные значения). По определенной команде прибор возвращает список разрешенных значений для данного параметра.

Но не все так просто. Хитрый прибор злобно возвращает список с неточными значениями. Например, не 30,  а 29,99. Попытка же отослать обратно эти 29,99 приводит к ошибке так как получать он желает именно 30.

В большинстве случаев задачу удается решить обычным округлением до значащих цифр (как - только что обсуждали). Но! В машанном представлении округление тоже может дать не точно 30, например, а 29,99999998 в силу машинной ошибки. И эту величину прибор есть уже не хочет. 

Думаю в таких случаях надо идти таким путем:
1. Округлять и пробовать установить значение.
2. Если не устанавливается, пробовать установить значение большее на величину машинной ошибки
3. Если опять не устанавливается, пробовать установить значение меньшее на величину машинной ошибки



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Pavia
Дата 30.3.2012, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Используй битовое представление single double. и меняй биты мантисы
PM MAIL   Вверх
_Y_
Дата 30.3.2012, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Pavia, понятно. Отличная идея. Сам не додумался. Повожусь с ней.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 30.3.2012, 22:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(_Y_ @  30.3.2012,  20:50 Найти цитируемый пост)
Хитрый прибор злобно возвращает список с неточными значениями. Например, не 30,  а 29,99. 

Надо точно посмотреть, что же возвращает прибор. Пока ты видишь то, что возвращает разговаривающая с ним программа - а это испорченный телефон.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 31.3.2012, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Akina @  30.3.2012,  22:15 Найти цитируемый пост)
Надо точно посмотреть, что же возвращает прибор. Пока ты видишь то, что возвращает разговаривающая с ним программа - а это испорченный телефон.


В том-то и дело что я могу посмотреть только то, что моя программа получает от некой другой (не моей) программы, являющейся чем-то-вроде-драйвера к драйверу данного прибора. На каком этапе возникает нестыковка машинных ошибок (если это они, конечно) выяснять особой возможности нет. Да и смысла особого тоже так как менять в этих драйверах к драйверам я ничего не могу. Согласно документации (и моим собственным наблюдениям-экспериментам) обмен идет данными типа double.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Mirkes
Дата 1.4.2012, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вопрос, а каков набор значений? Их ограниченное число? Может пустить сканер, который начнет подряд все double загонять в прибор и отлавливать правильные значения. А потом проанализировать, какие именно значения являются правильными smile
Для сканирования можно использовать Double.doubleToLongBits и Double.longBitsToDouble.


--------------------
Mirkes
PM MAIL   Вверх
_Y_
Дата 1.4.2012, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Mirkes @  1.4.2012,  08:44 Найти цитируемый пост)
Может пустить сканер

Нет, это не годится к сожалению. 

В таком случае я просто создал бы таблицу правильных значений и выбирал из нее ближайшее к заданному.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Mirkes
Дата 1.4.2012, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я предложил сканирование как способ понимания того, что есть правильные числа для того прибора.
Если прибор действительно старый, то числа там врядли будут double. Скорее single, или вообще что-то с фиксированной точкой. 
Если я правильно понял, то спецификации формата обмена с самим прибором у Вас нет. А double принимает драйвер. Возможно там требуется просто руками погасить часть младших цифр мантиссы.



--------------------
Mirkes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




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


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

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