|
Редактирование значения типа float, Как организовать такое? |
|
|
|
Feb 13 2009, 10:52
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(ARV @ Feb 13 2009, 11:12)  минусы: - назовите сами  Сам так делал, еще на асме и на 74 пике  У меня была структура "параметры редактирования", которая включала в себя: - количество знакомест при редактировании - количество знаков после запятой (если 0 - точка не выводится) - знаковое/беззнаковое число - минимальное и максимальное допустимое значение. Если при сохранении число выходит за диапазон - сохранение не происходит, выдается злобный сигнал, число заменяется максимумом или минимумом, пользователю предлагается продолжить редактирование. Функции передавался указатель на число и указатель на такую структуру. Таким образом одна процедура использовалась для редактирования самых разнообразных параметров. Недостаток только один - этот метод не подходит, если положение точки не фиксировано.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 13 2009, 11:42
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Сергей Борщ @ Feb 13 2009, 14:52)  Функции передавался указатель на число и указатель на такую структуру. Таким образом одна процедура использовалась для редактирования самых разнообразных параметров. Недостаток только один - этот метод не подходит, если положение точки не фиксировано. +1 То же самое плюс флаг read_only, селектор источника, откуда берется число (SRAM/EEPROM/FLASH/SPECIAL) SPECIAL - в этом случае будет указатель на функцию, возвращающую требуемое число В особо извращенных случаях добавлялись хинтовые строки для выдачи в UART, что это за параметр еще и на двух языках: английском и матерном родном.  Ужас У человека в цеху несколько необслуживаемых железяк, а пульт программирования один - подошел, воткнулся, исправил, выткнулся - продолжение работы
|
|
|
|
|
Feb 13 2009, 11:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(singlskv @ Feb 13 2009, 11:41)  А когда редактируешь строку и потом переводишь в флоат разьве точность не теряется ? Даже если она и "теряется", но лишь единожды, а у Вас на каждое нажатие кнопки. По моему скромному мнению, при помощи atof достигается максимальная точность из возможных... И уж не хуже чем при целочисленном способе редактирования. В этом смысле Ваш вариант самый неудачный. atof - ведь библиотечная функция и отшлифована она не одним поколением программистов, поэтому недоверия у меня она никогда не вызывает.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 13 2009, 16:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(demiurg_spb @ Feb 13 2009, 14:57)  Даже если она и "теряется", но лишь единожды, а у Вас на каждое нажатие кнопки. По моему скромному мнению, при помощи atof достигается максимальная точность из возможных... И уж не хуже чем при целочисленном способе редактирования. В этом смысле Ваш вариант самый неудачный. atof - ведь библиотечная функция и отшлифована она не одним поколением программистов, поэтому недоверия у меня она никогда не вызывает. Ну давайте рассмотрим такой пример на Вашем алгоритме: Было число 1.44999999 Выводим с одним разрядом после запятой: 1.4 хотим уменьшить это число на 1 минимальный шаг(типа чего-нить регулируем) жмем кнопку вниз на младшем разряде получаем: 1.3 жмем ввод ИТОГО: было 1.44999999 стало 1.3 вместо регулирования на 0.1 получили на 0.14999999 Это правильно ?
|
|
|
|
|
Feb 13 2009, 16:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(singlskv @ Feb 13 2009, 19:28)  Ну давайте рассмотрим такой пример на Вашем алгоритме: Было число 1.44999999 Выводим с одним разрядом после запятой: 1.4 хотим уменьшить это число на 1 минимальный шаг(типа чего-нить регулируем) жмем кнопку вниз на младшем разряде получаем: 1.3 жмем ввод ИТОГО: было 1.44999999 стало 1.3 вместо регулирования на 0.1 получили на 0.14999999 Это правильно ?  это неправильно. однако, если только один знак после запятой в редактируемом параметре - откуда там возьмется "хвостик"? редактируется, как я понимаю, входной параметр для некоего алгоритма, но никак не выходной, т.е. получаемый в результате вычислений... то есть никакого 1.449999 быть не может (не должно по определению)? может быть только 1.4
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Feb 13 2009, 17:52
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ARV @ Feb 13 2009, 19:58)  это неправильно. однако, если только один знак после запятой в редактируемом параметре - откуда там возьмется "хвостик"? редактируется, как я понимаю, входной параметр для некоего алгоритма, но никак не выходной, т.е. получаемый в результате вычислений... то есть никакого 1.449999 быть не может (не должно по определению)? может быть только 1.4 Ну а если этот пареметр рассчетный(например через деление) ? и его результат получается совсем в другом месте ? А потом нужно его подредактировать? На самом деле эти споры насчет округлений можно вести до бесконечности, ИМХО, правда заключается в единичке младшего разряда который Вы позволили редактировать, +- эта 1 это и есть точность...
|
|
|
|
|
Feb 13 2009, 18:13
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 20:58)  А чтоб не спорить, должно быть правило: система параметров прибора должна быть квадратно-гнездовой как и голова воображаемого пользователя. И если на юзера падают результаты промежуточных вычислений, то это не хорошо. Ok, только никуда пока не уходите,  будете связующим звеном между пультом который получает значения по модбас их редактирует и отправляет их обратно(или в другой модуль  ), боюсь без Вашей помощи они квадратно-гнездовым не договорятся...
|
|
|
|
|
Feb 13 2009, 18:30
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 21:21)  В таком случае пульт будет не устройство, а должность  И думаю, что в конце концов у пользователя такого пульта может возникнуть сильная жажда сервиса. Вплоть до денег за работу по модернизации. Это еще почему ? получили извне флоат отредактировали отправили назад почему мой вариант будет хуже чем: >ИТОГО: было 1.44999999 стало 1.3 >вместо регулирования на 0.1 получили на 0.14999999 ?
|
|
|
|
|
Feb 13 2009, 18:53
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 21:39)  Отредактировали калькулятороподобной клавой - вааще вопросов нету. А 2/4/6 кнопок... фрагмент не вписывается в Геракла (ЦЕ) -4 кнопки -5 семисегментников(+точка) разрядов (но можно сколько надо) -вывод/ввод целых/флоат -ввод/контроль пароля на определенные параметры -режим ввода по приращениям не совпадающим с разрядом -режим задания значений по умолчанию все редактируемые параметры удаленные, через модбас (ЦЕ)
|
|
|
|
|
Feb 13 2009, 22:00
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(ARV @ Feb 13 2009, 21:54)  +5! и нечего голову всем морочить! редактируйте в символьном виде с клавы типа PS/2 и будет вам счастье  Да была бы вообще тема!!! Цитата(singlskv @ Feb 13 2009, 00:33)  А редактирование делать примерно так:
Это конечно упрощенно, но идея я думаю ясна. Вот такое решение вообще офигенно! Суперрррррр!..........
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|