cpu13.ru - форум OMRON
http://cpu13.ru/

Помогите реализовать
http://cpu13.ru/viewtopic.php?f=4&t=422
Страница 1 из 1

Автор:  Mosfett [ Вс окт 26, 2008 15:43 ]
Заголовок сообщения:  Помогите реализовать

Как реализовать вычисление по такой формуле: perem=360/1024*N*0,5. Собственно говоря основная проблема как конвертировать десятичное 0,5 в hex. Ранее никогда не сталкивался с таким. Голову уже сломал. ПОМОГИТЕ.... ну пожалуйста.

Автор:  bon [ Вс окт 26, 2008 16:18 ]
Заголовок сообщения:  Re: Помогите реализовать

Mosfett писал(а):
Собственно говоря основная проблема как конвертировать десятичное 0,5 в hex. Ранее никогда не сталкивался с таким. Голову уже сломал. ПОМОГИТЕ.... ну пожалуйста.
ну во первых 0,5 если ты конечно имеешь ноль целых пять десятых это вовсе не десятичное число, а число с плавающей точкой... т.е. REAL... для вычислений используешь все те же инструкции только с перфиксом F(*F,/F и т.д.) для преобразования целого в реал FLT, для преобразования в целые FIX вроде, а вот зачем его переводить в hex?

Автор:  Alex [ Пн окт 27, 2008 08:22 ]
Заголовок сообщения: 

а не проще ли будет вместо "*0,5" использовать "/2" ?

Автор:  Олег [ Пн окт 27, 2008 08:56 ]
Заголовок сообщения: 

Во многих случаях когда встаёт необходимость использовать числа вроде 0,5 в hex, делаем вычисления с "5" предварительно увеличив другое число в формуле на 10, или потом результат делим на 10.

perem=360/1024*N*0,5
по другому будет выглядеть как perem=0,17578125*N такую задачьку в hex решить не просто, проще в REAL. ну а если всё-таки принципиально в hex, тогда придётся какие-то числа умножать на 100, 1000 и далее работать с результатом в программе не забывая что сдвинуто несколько знаков. При действиях с hex нужно не забывать, что в результате умножения можно превысить максимальное значение для этого числа. ну и если реально нужно пересчитывать какие-то значения в hex, чтобы не потерять точность вычисления, очерёдность действий в формуле нужно подбирать так чтобы при умножении не привысить максимальные значения, а при делении не потерять знаки.
т.е. должно выглядеть примерно так:
perem=360*5*N/1024 если N большое число
perem=360*5*N*1000/1024 если N малое число

ну а если цифры это константы, то вообще не парится,
perem=1758*N а далее в проге не забывать что результат сдвинут на 4 знака.

Страница 1 из 1 Часовой пояс: UTC + 3 часа (Russia: MSK)
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/