Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 162
1

Как добавить десятичную точку спереди? Пример 2345 -> 0.2345

26.11.2010, 19:15. Показов 5895. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как добавит десятичную точку спереди пример 2345 -> 0.2345

делить на 10000 не годится, во первых 10000 константа, а у нас может быть и 3455676 которое надо в 0.3455676
преобразовать, потом деление очень ресурсоемкая операция.

к строковым преобразованиям тоже не хотелось бы прибегать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2010, 19:15
Ответы с готовыми решениями:

Найти все числа, цифры которых образуют возрастающую последовательность (2345 или 2689) и кратны k
Помогите пожалуйста нарисовать блок-схему алгоритма для программы Найти все числа, цифры которых...

Программа проверки результатов вывода целого значения 12345 и значения с плавающей точкой 1.2345 в полях разной ширины
Напишите программу для проверки результатов вывода целого значения 12345 и значения с плавающей...

Дано натуральное число а. записать убывающую последовательность чисел без последней цифры предыдущего ( например а=2345, полученная последовательность
помогите пожалуйста решить задачу двумя способами, через функции и процедуры! дано натуральное...

Необходимо определять запятую, как десятичную точку
Необходимо определять запятую как десятичную точку При задании велечины в TextBox с запятой вместо...

Программным путем добавлять десятичную точку
с помощью обработчика события рабочего листа (изменение в ячейке таблицы)при вводе значения КТУ...

15
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 - результат
Сейчас покумекаю над более оптимальным решением. А здесь, кстати, гарантированное зависание неправильный результат при f < 0.0. Так что обязательно надо делать проверку.

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
и вообще, какой тип входных и выходных данных?
это из ОВЕНовского прибора ТРМ251, у них там протокол свой,

---
5.1.1 Формат числа с плавающей точкой
Формат числа с плавающей точкой - это просто стандартное 4-байтовое плавающее число в IEEE-формате, или усеченное 3-х байтовое (PIC-формат) - то же, что и IEEE, но с отброшенным младшим байтом мантиссы. Если известно, что формат плавающий, то усеченный и полный IEEE-форматы можно различить по битам размера информационного поля. Внутренние поля представлены только в двоичном, но не в двоично-десятичном виде.
---

но тут очевидно обычный флоат не ПИКовский, потому как прибор разбирал - там стоит 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^);
Это при условии, что старший байт у нас b1, иначе - меняем всё местами.
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2010, 22:43
Помогаю со студенческими работами здесь

Как добавить новую точку на компонент Chart
Кто знает подскажите пожалуйста как добавить новую точку на компонент Chart? Также, если не...

Как добавить точку в колонку таблицы с Python кода?
Всем доброго времрени суток!!! У меня есть такой код: import discord from discord.ext import...

Как в QwtPlotCurve добавить еще одну точку [qwt]
я читал мануал по qwt и не нашел метод, с помощью которого можно добавлять точки по нажатию кнопки...

Как добавить точку в колонку таблицы с Python? PostgreSQL
Всем доброго времрени суток!!! У меня есть такой код: import discord from discord.ext import...

Как добавить пример другого кода в код html
Здравствуйте подскажите пожалуйста как добавить пример другого кода в код html? Я добавляла его так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru