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

 
 
 
Reply to this topicStart new topic
> деление целых и получение целую дробную часть, IAR 6.12 , atxmega32d4
addi
сообщение Oct 31 2012, 06:27
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Здравствуйте
Возникла необходимость деления целых чисел в рамках atxmega32d4 и IAR 6.12 и дале оперирование над целыми
Пробую на следующем примере:
Код
float cntpf;
unsigned char l;

cntpf = l*12/512;
Send_Byte(cntpf); // unsigned char

Он определенно не правильный потому как в нем учитывается дробная часть при преобразовании в unsigned char в функции Send_Byte.
Подскажите пожалуйста кто знает как можно получить дробную часть чтобы мне ее далее учесть.

Заранее благодарен
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 31 2012, 07:48
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



если целочисленное деление то

Код
int a,b,c
a =b/c; // целая часть
a =b%c; // остаток от деления

Если для float? то библиотеки надо смотреть, так не помню


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 31 2012, 07:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Не очень понятно: что же Вы хотите получить?
Если разделить число с плавающей запятой на целую и дробную части (т.е. одно число - всё, что было до запятой; второе - после запятой), то есть функция modf.
Go to the top of the page
 
+Quote Post
addi
сообщение Oct 31 2012, 07:59
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Цитата(Палыч @ Oct 31 2012, 10:50) *
Не очень понятно: что же Вы хотите получить?
Если разделить число с плавающей запятой на целую и дробную части (т.е. одно число - всё, что было до запятой; второе - после запятой), то есть функция modf.

угу, не подскажите ее синтаксис?

сделал пока так:

Код
unsigned short;
unsigned char cntpfd;

                      cntpf = l*12;
                      cntpf = cntpf / 512;
                      cntpfd = cntpf % 512;


Сообщение отредактировал addi - Oct 31 2012, 08:00
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 31 2012, 08:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(addi @ Oct 31 2012, 11:59) *
не подскажите ее синтаксис?

Это - стандартная функция:
Цитата
7.12.6.12 The modf functions
Synopsis
1 #include <math.h>
double modf(double value, double *iptr);
Description
2 The modf functions break the argument value into integral and fractional parts, each of
which has the same type and sign as the argument. They store the integral part (in
floating-point format) in the object pointed to by iptr.
Returns
3 The modf functions return the signed fractional part of value.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 31 2012, 08:29
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Стандартная библиотечная функция div из math.h

div_t div(int number, int denom) -- Divide one integer by another.

За один проход возвращает и целую, и дробную часть в виде структуры div_t

Экономия в два раза по сравнению с последовательными / и %


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 14:30
Рейтинг@Mail.ru


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