0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
1 | |
Как добавить десятичную точку спереди? Пример 2345 -> 0.234526.11.2010, 19:15. Показов 5895. Ответов 15
Метки нет (Все метки)
как добавит десятичную точку спереди пример 2345 -> 0.2345
делить на 10000 не годится, во первых 10000 константа, а у нас может быть и 3455676 которое надо в 0.3455676 преобразовать, потом деление очень ресурсоемкая операция. к строковым преобразованиям тоже не хотелось бы прибегать.
0
|
26.11.2010, 19:15 | |
Ответы с готовыми решениями:
15
Найти все числа, цифры которых образуют возрастающую последовательность (2345 или 2689) и кратны k Программа проверки результатов вывода целого значения 12345 и значения с плавающей точкой 1.2345 в полях разной ширины Дано натуральное число а. записать убывающую последовательность чисел без последней цифры предыдущего ( например а=2345, полученная последовательность Необходимо определять запятую, как десятичную точку Программным путем добавлять десятичную точку |
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
|
|
26.11.2010, 19:29 | 2 |
арифметика с фикс. точкой? отдельно храним число, отдельно позицию точки в нем. а к нужному формату приводим только при выводе. деление/умножение на степень 10ки за одно сложение/вычитание, но теряется точность
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
26.11.2010, 21:02 | 3 |
А какой тип переменной?
0
|
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
|
|
26.11.2010, 21:27 | 4 |
Код
int i = 2345; ftoot f = (ftoot) i; while (f > 1) { f /= 10; }; // f - результат P.S. что-то больше ничего и не придумал. Bin -> BCD -> Bin это дольше. Разве что вот так сократить: Код
int i = 2345; ftoot f = (ftoot)i; while ( (f /= 10) > 1.0 ) {}; // f - результат
0
|
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
26.11.2010, 21:32 | 5 |
мне нужно ftoot собрать из байтов, но вообще я уже догнал, что в Си наверное можно собрать через union
правда пока еще не пробовал.
0
|
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
|
|
26.11.2010, 21:34 | 6 |
и вообще, какой тип входных и выходных данных?
0
|
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
26.11.2010, 21:38 | 7 |
никак не могу понять, как этот Флоат кодируется
вот читаю http://en.wikipedia.org/wiki/IEEE_754-1 ... nt_biasing http://uptood.wikimedia.org/wikipedia/sommons/thumb/e/e8/IEEE_754_Single_Ftooting_Point_Format.svg/618px-IEEE_754_Single_Ftooting_Point_Format.svg.png формула http://uptood.wikimedia.org/math/d/5/6/d56947fa86162516e5b73bd7a10100cf.png сигн понятно, экспонента тоже, - все сходится, но вот Fraction (23 bit) никак у меня получается 1 000 000 000 000 000 000 000 = 2097152 Fraction = 1.2097152 1.2097152*10^-3 = 0.00120971 а в примере указанно 0,15625
0
|
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
26.11.2010, 21:42 | 8 |
Сообщение от OTPINE
--- но тут очевидно обычный флоат не ПИКовский, потому как прибор разбирал - там стоит Atmega 128 а не PIC и 4 байта данные о температуре размер имеют
0
|
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
|
|
26.11.2010, 21:43 | 9 |
Назови формат входных и выходных данных.
0
|
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
26.11.2010, 21:54 | 10 |
входные
4 байта например 65 | 169 | 171 | 54 выходные -объеденить их в флоат --- для МК я понял как расшивровывать, через Юнион, но для компа я пишу под Дельфи, там Юнионов нет, поэтому вопрос открытый, как вообще этот флоат расшифровывать
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
26.11.2010, 22:01 | 11 |
Что-то не совсем понятно.. эти 4 байта - простое целое число (aka integer) или что?
0
|
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
26.11.2010, 22:04 | 12 |
это флоат переданное побайтово
его надо склеить
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
26.11.2010, 22:14 | 13 |
Так в чём беда-то?
байты b1, b2, b3, b4 Остальные действующие лица: res: single; //Результат tmp: DWORD; //Временная фигня p: Pointer; //Указатель Код
tmp := b1 shl 24; tmp := tmp or (b2 shl 16); tmp := tmp or (b3 shl 8); tmp := tmp or b4; p := @tmp; res := Single(p^);
0
|
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
|
|
26.11.2010, 22:22 | 14 |
О работает,огромное всем спасибо,
но правда все равно этот флоат черным ящиком для меня остался, потому как не понял, как мантисса преобразуется в десятичный вид
0
|
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
|
|
26.11.2010, 22:31 | 15 |
если ты пишешь на Си и на выходе тебе нужен обычный флоат - какие проблемы?
ftoot f = (ftoot) i; и просто берёшь код что я написал.
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
26.11.2010, 22:43 | 16 |
Я потупил в ту статью на Википедии и вот что осознал:
Допустим, если значение мантиссы = х, то на самом деле это: http://**************************/download/file.php?id=2534&sid=750cdcf168f7a351905ae2829aad0afd Т.е. у нас было 01.. и 21 нолик, что = 2097152. Мантисса тогда получается = 2097152 * (1/8388607) = 0.25. И тогда само число = 1.25 * 2^-3 = 0.15625. Сходится.... =) http://uptood.wikimedia.org/math/2/5/6/2567776ddd65d7deb6b0a8e63dd82e52.png
0
|
26.11.2010, 22:43 | |
26.11.2010, 22:43 | |
Помогаю со студенческими работами здесь
16
Как добавить новую точку на компонент Chart Как добавить точку в колонку таблицы с Python кода? Как в QwtPlotCurve добавить еще одну точку [qwt] Как добавить точку в колонку таблицы с Python? PostgreSQL Как добавить пример другого кода в код html Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |