2009-05-21 4 views
9

Я попытался найти логарифм + Objective-C, но все это я получаю тест по математике страниц из учителей или объяснений, что такой логарифм;)Какие функции/методы логарифма доступны в объективе-c/cocoa-touch?

У меня есть некоторые измерения, которые, как 83912.41234 и другие 32,94232. Мне нужно надавить на этот огромный спектр на что-то между 0 и 100, и что 32.94232 будет иметь хотя бы нечто большее, чем 2, где 83912.41234 будет около 100. Поэтому я думаю, что функция логарифма будет моим другом здесь.

UPDATE: Я наткнулся на файл math.h через "Открыть Быстро" (очень хорошие команды в Xcode: SHIFT + CMD + D), и там, большой сюрприз:

extern double log (double); 
extern float logf (float); 

extern double log10 (double); 
extern float log10f (float); 

extern double log2 (double); 
extern float log2f (float); 

extern double log1p (double); 
extern float log1pf (float); 

extern double logb (double); 
extern float logbf (float); 

Но : Нет текста, комментариев нет. Я не такой математик. Таким образом, некоторое описание было бы хорошим, то есть, какой логарифм для какого случая, как выглядит кривая и т. Д. ... поэтому любые отличные ссылки высоко ценятся!

+0

Вы ищете результаты, чтобы быть на кривой или прямой? – Abizern

+0

Мне нужно попробовать, но на данный момент я думаю, что это кривая. log2() кажется хорошим, но также кажется, что это очень дорогостоящий расчет. – Thanks

+0

Дорогой, каким образом? – Abizern

ответ

1

Как насчет того, чтобы захватить книгу на стандартных библиотечных функциях C?

В противном случае, вы можете попробовать страницы человека: man 3 logf, например

2

math.h является стандартом включают. на странице wikipedia есть документация.

Другим способом «хлюпать» значения является соответствие ваших значений прямой линии. Для вас, например: уравнение

Прямой линии

y = mx + c 
y = 'squished' value. 
x = The value you want to squish 
m = Gradient of the line 
c = intercept on the y axis 

Быстрого расчет на ваши ценностях дает что-то вроде:

y = 1.17e-3 x + 1.96 

Надеется, что это помогает.

+0

+1 для ссылки Wiki ... никогда бы не подумал об этом –

14

Кроме того, получение логарифм с произвольным основанием:

float logx(float value, float base) 
{ 
    return log10f(value)/log10f(base); 
}