помогите с типами данных

alexalexmart
Offline
Зарегистрирован: 08.10.2014

Я новичек в С, поэтому такой нубский вопрос.

Понадобилось мне рассчитать арксинус через ряд Фурье.

float arcsinF (float var)
{
float tmp=0;
float val;
float result=0;
val = var;
tmp = val+
(1/6)*pow(val,3)+
(3/40)*pow(val,5)
+(15/336)*pow(val,7)
+(105/3456)*pow(val,9);
result = (tmp*180/3.14159);
return result;
}

Однако столкнулся с такой проблемой. При вызове arcsinF(10/40) упорно возврашает 0 потому что 10 и 40 целые числа. тоже с использованием переменных типа int. как это победить? Я не хочу ради одной функции переводить все переменные в float.

alexalexmart
Offline
Зарегистрирован: 08.10.2014

короче говоря как получить float результат от деления двух int?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Может быть начать с начала? Ну типа накой это нужно в ардуино?

Araris
Offline
Зарегистрирован: 09.11.2012

http://arduino.cc/en/Reference/Float

   int x;
   int y;
   float z;

   x = 1;
   y = x / 2;            // y now contains 0, ints can't hold fractions
   z = (float)x / 2.0;   // z now contains .5 (you have to use 2.0, not 2)

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мне просто любопытно, на сколько подвесает уно при подобных расчетах.

alexalexmart
Offline
Зарегистрирован: 08.10.2014
	int x;
	int y;
	float z;
	z = (float)x /y;

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

 

alexalexmart
Offline
Зарегистрирован: 08.10.2014

Пока совсем не подвисает)) но код еще совсем маленький. вот если бы я тотже арксинус считал через ряд Фурье члена так до 100-го рекурсией, тогда да. но это уже тема другого топика. Просто из соображений экономии памяти и быстродействия стараюсь по минимуму использовать переменные Float, вот и столкнулся.

alexalexmart
Offline
Зарегистрирован: 08.10.2014

тема закрыта