Пытаюсь повысить производительность обновления ();функция ниже.Числа внутри переменной mathNumber будут взяты из строки NSString, созданной из текстового поля.Несмотря на то, что я использую пять чисел, я хотел бы, чтобы он мог запускать любую сумму, которую пользователь вставляет в текстовое поле.Какими способами я мог бы ускорить код в update ();с C и / или Objective-C?Я также хотел бы, чтобы он работал на Mac и iPhone.
typedef struct {
float *left;
float *right;
float *equals;
int operation;
} MathVariable;
#define MULTIPLY 1
#define DIVIDE 2
#define ADD 3
#define SUBTRACT 4
MathVariable *mathVariable;
float *mathPointer;
float newNumber;
void init();
void update();
float solution(float *left, float *right, int *operation);
void init()
{
float *mathNumber = (float *) malloc(sizeof(float) * 9);
mathNumber[0] =-1.0;
mathNumber[1] =-2.0;
mathNumber[2] = 3.0;
mathNumber[3] = 4.0;
mathNumber[4] = 5.0;
mathNumber[5] = 0.0;
mathNumber[6] = 0.0;
mathNumber[7] = 0.0;
mathNumber[8] = 0.0;
mathVariable = (MathVariable *) malloc(sizeof(MathVariable) * 4);
mathVariable[0].equals = &mathPointer[5];
mathVariable[0].left = &mathPointer[2];
mathVariable[0].operation = MULTIPLY;
mathVariable[0].right = &mathPointer[3];
mathVariable[1].equals = &mathPointer[6];
mathVariable[1].left = &mathPointer[1];
mathVariable[1].operation = SUBTRACT;
mathVariable[1].right = &mathPointer[5];
mathVariable[2].equals = &mathPointer[7];
mathVariable[2].left = &mathPointer[0];
mathVariable[2].operation = ADD;
mathVariable[2].right = &mathPointer[6];
mathVariable[3].equals = &mathPointer[8];
mathVariable[3].left = &mathPointer[7];
mathVariable[3].operation = MULTIPLY;
mathVariable[3].right = &mathPointer[4];
return self;
}
// This is updated with a timer
void update()
{
int i;
for (i = 0; i < 4; i++)
{
*mathVariable[i].equals = solution(mathVariable[i].left, mathVariable[i].right, &mathVariable[i].operation);
}
// Below is the equivalent of: newNumber = (-1.0 + (-2.0 - 3.0 * 4.0)) * 5.0;
// newNumber should equal -75
newNumber = mathPointer[8];
}
float solution(float *left, float *right, int *operation)
{
if ((*operation) == MULTIPLY)
{
return (*left) * (*right);
}
else if ((*operation) == DIVIDE)
{
return (*left) / (*right);
}
else if ((*operation) == ADD)
{
return (*left) + (*right);
}
else if ((*operation) == SUBTRACT)
{
return (*left) - (*right);
}
else
{
return 0.0;
}
}
РЕДАКТИРОВАТЬ:
Сначала я должен сказать спасибо за все ваши добрые сообщения.Это первый форум, на котором у меня есть люди, которые не говорят мне, что я полный идиот.Извините за возвращение себя;Я не осознавал, что это тоже был форум по объективному С (поэтому я и спешно использовал С).У меня есть собственный парсер, который работает медленно, но меня не волнует его скорость.Все, что я хочу, - это ускорить функцию update (), поскольку она замедляет все, и 90% объектов используют ее.Кроме того, я пытаюсь заставить его работать быстрее на устройствах iOS, так как я не могу ничего скомпилировать в текстовые поля.Если у вас есть другие советы по ускорению обновления (), я благодарю вас.
Еще раз спасибо, Джонатан
РЕДАКТИРОВАТЬ 2:
Что ж, я заставил его работать быстрее, изменивэто из:
int i;
for (i = 0; i < 4; i++)
{
*mathVariable[i].equals = solution(*mathVariable[i].left, *mathVariable[i].right, mathVariable[i].operation);
}
Кому:
*mathVariable[0].equals = solution(*mathVariable[0].left, *mathVariable[0].right, mathVariable[0].operation);
*mathVariable[1].equals = solution(*mathVariable[1].left, *mathVariable[1].right, mathVariable[1].operation);
*mathVariable[2].equals = solution(*mathVariable[2].left, *mathVariable[2].right, mathVariable[2].operation);
*mathVariable[3].equals = solution(*mathVariable[3].left, *mathVariable[3].right, mathVariable[3].operation);
Есть ли другой способ увеличить его так же быстро, как предварительно загруженные числа в массиве, как указано выше?