вычисление математического выражения - очень быстро - с objective-c

я хочу вычислить математическое выражение типа y = 2 (x * x) + 2.

Но мне это нужно в цикле, где x изменяется, может быть, 100000 раз.

I написали код для перевода выражения в дерево синтаксического анализа.

Тогда у меня есть метод для оценки дерева синтаксического анализа.

- (double) evaluate:(TreeNode *)node variable:(double)x
{
    if ([node _operand] != 0) 
    {
        return [node _operand];
    }

    else if ([node _variable] != NULL) 
    {
        return x;
    }

    else if ([node _operator] != NULL) 
    {
        if ([[node _operator] isEqualToString: @"+"]) 
        {
            return ([self evaluate:[node left] variable:x] + [self evaluate:[node right] variable:x]);
        }
        else if ([[node _operator] isEqualToString: @"-"]) 
        {
            return ([self evaluate:[node left] variable:x] - [self evaluate:[node right] variable:x]);
        }
        else if ([[node _operator] isEqualToString: @"*"]) 
        {
            return ([self evaluate:[node left] variable:x] * [self evaluate:[node right] variable:x]);
        }
        else if ([[node _operator] isEqualToString: @"/"]) 
        {
            return ([self evaluate:[node left] variable:x] / [self evaluate:[node right] variable:x]);
        }
    }

    return 0;
}

Кто-то сказал: если мне нужно идти на скорость, я могу перевести выражение в код C, скомпилировать и Свяжите его в dll на лету и загрузите (занимает около секунды). Это, плюс мемоизированные версии математических функций, может дать мне лучшую производительность.

Как я могу этого добиться? Как я могу скомпилировать математическое выражение в код C, скомпилировать и связать его с DLL или около того. А затем загрузить его на лету, чтобы ускорить цикл?

Большое спасибо!

Крис

7
задан Chris2810 24 July 2011 в 20:52
поделиться