математическая функция "Журнал ()" - PullRequest
0 голосов
/ 15 февраля 2011

Есть ли способ реализовать математическую функцию Log () в уравнении с помощью приложения для iphone?Сейчас я работаю над тем, чтобы без функции журнала требовалось около 400+ операторов if и else if.Я уже выписал эти заявления if и else if.половина из них работает, а другая половина возвращает 0,00.После ЧАСОВ попыток найти проблему и сравнить ее с той частью, которая работает, я все еще не могу понять.я знаю, что могу сделать простую математику (сложение, вычитание, деление, многократное и т. д.), но я не нашел ничего, что можно найти на форумах, в гугле и т. д., которые говорят мне, как добавить функцию журнала.если бы я мог сделать это, я мог бы сократить свой код с примерно 500 строк до примерно 40 вершин.Может ли кто-нибудь помочь мне с этим или, по крайней мере, указать мне правильное направление, где я могу найти тему или учебник по этому вопросу?

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Я уже исправил пример кода Шона, размещенный в его ответе, но, чтобы быть совершенно ясным, были две проблемы в работе:

  • Во-первых, он не включал <math.h> и не использовал log из системной математической библиотеки.
  • Во-вторых, он опустил оператор умножения в выражении .19077f(logf(abNeckFactor)); мы часто пишем математику таким образом, но это не синтаксически правильный код C (или Obj-C).

Шон, я бы посоветовал вам потратить еще немного времени на чтение того, что доступно в C и Objective-C; в языке присутствует огромное количество функциональных возможностей, и несколько часов, потраченных на изучение того, что уже сделано для вас, потратят вам много-много часов на поиск вещей в будущем.

Обратите внимание, что функция log является логарифмом base-e. Многие люди в технических областях за пределами математики и вычислительной техники используют log вместо ссылки на логарифм с основанием-10; если это то, что вам нужно, вам нужно позвонить log10( ) - или log10f( ) - вместо этого.

4 голосов
/ 15 февраля 2011
#import <math.h>

// ...

double someLog = log(someDouble);

(Примечание: я использовал здесь double / log, но вы можете рассмотреть возможность использования float / logf, если скорость является проблемой, поскольку они могут быть быстрее на iPhone (IIRC).)

0 голосов
/ 15 февраля 2011

Я знаю, что вы уже получили ответ на свой вопрос, но здесь нет необходимости писать тонны if, else if, else if, .... else, для дальнейшего использования.

Хранить ответы в массиве. Например, вы можете определить массив массивов, который выглядит следующим образом: [(мин, макс, значение), (мин, макс, значение), ...]. Затем переберите массив.

arr = {{min, max, value}, {min, max, value}, ...}
for i in range(0, arr.length) 
  if(arr[i][min_i] < x && x < arr[i][max_i]) {return arr[val_i]}

Возможно, есть способ выяснить, как сопоставить x с индексом массива, подобным x / (max-min) , чтобы log (x) будет обр [х / (макс-мин)] . Но я хочу сказать, что гораздо проще иметь массив или словарь и выполнять поиск по ним, чем иметь кучу операторов if, else if, else if, ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...