реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> А есть ли возможность создать свою переменную размером, 3 байта?
smk
сообщение Jul 13 2011, 14:29
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Нужно оперировать с числом в диапазоне 0...99999. Если превысит значит ошибка. Наиболее подходящая из стандартных это long, но если сделать на байт короче, то вычисления будут делаться быстрее. А можно это как-то сделать? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
uriy
сообщение Jul 13 2011, 14:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Видимо на 8-битном контроллере будут быстрее???
Берите контроллер 32-битный. Будет за один такт ваше число проверять.
Тем более раз вам нужны вычисления, то у 32-битных как правило и частоты значительно выше.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 13 2011, 14:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(uriy @ Jul 13 2011, 17:36) *
Видимо на 8-битном контроллере будут быстрее???
Берите контроллер 32-битный. Будет за один такт ваше число проверять.
Тем более раз вам нужны вычисления, то у 32-битных как правило и частоты значительно выше.

Так хочется пристроить остатки tiny26. Уж не смейтесь.
Ну чтобы было понятно зачем мне это все, объясню. Хочу сделать небольшой частотомер (tiny26 + LCD 16x1). При измерении частоты в диапазоне 0...9,9999 Гц понадобится подсчитать число импульсов генератора за период взодного сигнала. Получим значение приода в мкС. Чтобы узнать частоту делаем 1/Т. Конечно для тиньки такой изврат довольно крут, но всеже нужно попробовать.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 13 2011, 15:12
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (smk @ Jul 13 2011, 16:29) *
но если сделать на байт короче

Зачем на байт? На 15 бит. 16 бит и переполнение как раз 17. На ASM.....

QUOTE (smk @ Jul 13 2011, 16:45) *
Получим значение приода в мкС. Чтобы узнать частоту делаем 1/Т. Конечно для тиньки такой изврат довольно крут, но всеже нужно попробовать.

Изврат в том, что хотите делать это быстро. А это делать быстро совсем не надо - это время по любому завязано на время индикации и соответственно время восприятия человеком, а это время огромное.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 13 2011, 15:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Нет, делать быстро не обязательно. Скорее размер памяти программ лимитирует. На ASM конечно интересно попробовать, но опыта никакого. Индикация на ЖКИ. Как готово - вывели туда. Время на проведение одного измерения во много раз превысит время на вычисление.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 13 2011, 16:38
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Есть ли какой то алгоритм, который позволит изящно сделать такое:
Код
volatile unsigned long count=100000000;
volatile float frq;

frq=((1/count)*100000000);

Напрашивающееся математическое упрощение вижу, но это частный случай.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 13 2011, 16:56
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (smk @ Jul 13 2011, 18:38) *
Есть ли какой то алгоритм, который позволит изящно сделать такое:
volatile unsigned long count=100000000;
volatile float frq;
frq=((1/count)*100000000);

За бездумное использование volatile и float и надо, расстреливать на месяц оставлять без обеда. Непонимание того, что такое целочисленное деление, остаток от деления и того, что 1/10 = 0 лечить учебником арифметики для начальной школы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 13 2011, 17:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Код
float    32    от 1E-37 до 1E+37, с точностью не менее 6 значащих десятичных цифр

соответственно 0,000000001 вписывается в диапазон. или я не прав?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 13 2011, 18:53
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (smk @ Jul 13 2011, 19:19) *
CODE
float    32    от 1E-37 до 1E+37, с точностью не менее 6 значащих десятичных цифр

соответственно 0,000000001 вписывается в диапазон. или я не прав?

А вода мокрая, 2+2=4, соль соленая.... эти утверждения тоже верны, но ТОЖЕ не имеют никакого отношения к тому, что Вы не знаете арифметики sad.gif. Повторяю, если 1 разделить нацело на любое число больше 1 получится 0. Ровно 0. А для полного "счастья", если любое число разделить на 0, то получится фигово. Итого, Ваш частотомер:
CODE
volatile unsigned long count=100000000;
volatile float frq;
frq=((1/count)*100000000);

сможет показывать 0, 1, и непонятно как, но бесконечность.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 13 2011, 20:10
Сообщение #10


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Небольшая история из собственной студенческой жизни. Получили на группу из 4 человек систему уравнений с 10 или 12, точно не помню, переменными. Мои приятели, закончили ту же школу, что и известный нам теперь, господин Перельман. Ну, говорят, два пальца ... Решаем с помощью определителей. Достали, для облегчения жизни, калькулятор (на дворе 70-е годы). Засучили рукава и погнали. И очень быстро ушагали в область огромных чисел. Стало не хватать разрядности вычислений, поперли ошибки округления и прочее (это потом стало ясно; калькулятор все это в плавучке ел и цифирки на гора выдавал). Два дня по 12 часов бились, действительно до последних сил. Результат - никакой. Ничего даже близко похожего на правильные цифры.

Позже все сделали методом Гаусса, где такие побочные эффекты просто не проявляются.

Зато получил наглядный урок влияния конечной разрядной сетки на точность вычислений.

А посмотришь, народ то там то сям float, double. Фантастика!
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 14 2011, 06:35
Сообщение #11


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (sergeeff @ Jul 14 2011, 05:10) *
Зато получил наглядный урок влияния конечной разрядной сетки на точность вычислений.

Можно подробнее? Или ссылочку в соответствующий справочник) Спасибо)


2 smk: да подлите прямо на Си и все. Зачем мучать себя решением идеи ради идеи?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 14 2011, 07:08
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (haker_fox @ Jul 14 2011, 08:35) *
2 smk: да подлите прямо на Си и все. Зачем мучать себя решением идеи ради идеи?

Все хуже sad.gif. Вы не поняди, что он он и на 'C' не сумел. При этом зачем-то попытался воспользоваться float и обильно украсил все volatile.
После использования float следующим шагом может быть только использование printf().


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 14 2011, 08:04
Сообщение #13


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(haker_fox @ Jul 14 2011, 10:35) *
Можно подробнее? Или ссылочку в соответствующий справочник) Спасибо)


Ну полно раньше книжек было. Для интереса можно почитать:
http://developers.sun.com/solaris/articles/fp_errors.html
http://hijos.ru/2011/07/06/oshibki-o-kotor...-zadumyvaetsya/

и особенно забавно:
http://milkywaycenter.com/works/yurovitsky0.html
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 14 2011, 08:48
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(zltigo @ Jul 14 2011, 10:08) *
Все хуже sad.gif. Вы не поняди, что он он и на 'C' не сумел. При этом зачем-то попытался воспользоваться float и обильно украсил все volatile.
После использования float следующим шагом может быть только использование printf().

Хорошо. Пусть я ошибся и ничего не понимаю. Арифметики не знаю. Ну тогда расскажите мне свою идею как зная период в мкС получить значение частоты в формате 0,0000 ? Я действительно не знаю всех тонкостей С.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 14 2011, 08:54
Сообщение #15


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

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



Гуру над вами издеваются просто - это их маленькая слабость sm.gif
подумайте над следующим: если число 1,0003 заменить на "10003 и запятая после первого (левого) знака"... не подскажет ничего?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 14 2011, 09:08
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Подскажет конечно.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 14 2011, 09:12
Сообщение #17


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(ARV @ Jul 14 2011, 12:54) *
Гуру над вами издеваются просто - это их маленькая слабость sm.gif


Наша маленькая слабость состоит в том, чтобы хоть как-то разбудить мыслительный процесс.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 14 2011, 09:34
Сообщение #18


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (zltigo @ Jul 14 2011, 16:08) *
Все хуже sad.gif. Вы не поняди, что он он и на 'C' не сумел.

Я подумал, что автор знает Си из этого замечания
QUOTE (smk @ Jul 14 2011, 00:15) *
На ASM конечно интересно попробовать, но опыта никакого.


QUOTE (smk @ Jul 14 2011, 17:48) *
Ну тогда расскажите мне свою идею как зная период в мкС получить значение частоты в формате 0,0000 ? Я действительно не знаю всех тонкостей С.

T = 0.00005 сек. В "тиках" таймера это будет, скажем 50. Если тик таймера равен 1 мкс. Что нужно сделать, чтобы получить частоту? Ну я бы, не оптимально, конечно сделал так
1000000 мкс / 50 = 20 000 Гц.

Т.е. общая формула для вычисления частоты по полученным "тикам" таймера F = 1 000 000 / количество_тиков.
Или вопрос был в другом?

Если нужна точность n знаком после запятой, то числитель необходимо домножить на 10^n. Например, нам нужно измерять частоту с точностю 2 знака после запятой. Предположим, что таймер насчитал 57 тиков. Получим
F = 100 000 000 / 57 = 1 754 385.
Две последние цифры ответа - дробная часть. Т.е. частота составит 17 543,85 Гц.

Конечно, пример привел экспромтптом. Он не оптимизирован. Округление чисел не учитывается. Но мне трудно самому подобрать соответствующий пример, поскольку такие задачи я не решал. Но, надеюсь, что мое решение поможет Вам! Удачи!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 14 2011, 09:35
Сообщение #19


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

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



Цитата(sergeeff @ Jul 14 2011, 12:12) *
Наша маленькая слабость состоит в том, чтобы хоть как-то разбудить мыслительный процесс.
bb-offtopic.gif это я одобряю. но слабость в том, что вы делаете это слегка глумясь. надо подталкивать мысль в нужном направлении. можно было просто сказать: найдите и объясните разницу между 1/10 и 1.0/10 и тогда это было бы направлением, в котором человек мог бы копать. а сколько ни копай целочисленную арифметику, там не найдешь рассказов о float


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 14 2011, 11:58
Сообщение #20


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(ARV @ Jul 14 2011, 12:35) *
а сколько ни копай целочисленную арифметику, там не найдешь рассказов о float


А вы еще не догадались, что она нецелочисленная арифметика вам не нужна?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jul 14 2011, 12:45
Сообщение #21


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



так было же где-то в ветке АВР про частотомер страниц 20 минимум


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 14 2011, 15:41
Сообщение #22


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

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



Цитата(sergeeff @ Jul 14 2011, 15:58) *
А вы еще не догадались, что она нецелочисленная арифметика вам не нужна?
да я-то догадался:
Цитата
подумайте над следующим: если число 1,0003 заменить на "10003 и запятая после первого (левого) знака"... не подскажет ничего?
просто если автор тщетно пытался работать с плавучкой - надо было ему и подсказать, чем отличаются плавучие константы и целочисленные, а так же про явное и неявное преобразование типов... а нужна плавучка или нет - это решать автору, не так ли?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jul 14 2011, 17:22
Сообщение #23


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата(smk @ Jul 13 2011, 18:45) *
Так хочется пристроить остатки tiny26. Уж не смейтесь...

Цитата
... а нужна плавучка или нет - это решать автору, не так ли?

но автор кажется не понимает, что ему не нужна(мягко говоря) эта плавучка на tiny ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 14 2011, 17:44
Сообщение #24


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

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



Цитата(sigmaN @ Jul 14 2011, 21:22) *
но автор кажется не понимает, что ему не нужна(мягко говоря) эта плавучка на tiny ))
это вторично - не наше с вами это дело. если мы можем - мы должны подсказать и объяснить, а разбираться и принимать решение - это оставим автору


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jul 14 2011, 18:20
Сообщение #25


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ну если прямо уж совсем корректно и правильно подходить к вопросу, то да - согласен.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 14 2011, 20:42
Сообщение #26


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(ARV @ Jul 14 2011, 20:44) *
это вторично - не наше с вами это дело. если мы можем - мы должны подсказать и объяснить, а разбираться и принимать решение - это оставим автору


Как обычно, автора давно уже нет, а копья ломают советчики.

А вас просто попутал с автором топика, извиняйте пожалуйста и не обессудьте.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 15 2011, 09:49
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Автор есть. Получу результат на практике и напишу.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 20:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01619 секунд с 7
ELECTRONIX ©2004-2016