Метод натурального логарифма для NSNumber и NSDecimalNumber - PullRequest
2 голосов
/ 27 октября 2009

У меня есть код C #, который я конвертирую в Objective-C. В C # я бы назвал Math.Log (). Я постепенно узнаю, что некоторые люди придерживаются функций / типов Си и используют NSNumber и т. Д. Только когда им нужно взаимодействовать с Какао.

Есть ли эквивалент для ObjC / Cocoa или мне нужно зайти в C, чтобы сделать это? Мне нужно, чтобы мой код был максимально точным, потому что он является частью калькулятора.

Этот код должен работать на iPhone, если это имеет какое-либо значение.

Ответы [ 3 ]

5 голосов
/ 27 октября 2009

NSNumber полезно для хранения в NSArray или NSDictionary или в хранилище базовых данных.

Вы не хотите использовать NSNumber для арифметики, только для использования с базовыми или базовыми классами данных, когда вам нужно где-то хранить это число.

Это связано с тем, что при выполнении арифметических операций вам придется постоянно конвертировать между NSNumber и примитивными типами, такими как int, double, long и т. Д. Выполните операции с примитивными типами с желаемой точностью, а затем создайте экземпляр NSNumber, если он вам действительно нужен.

Тем не менее, довольно просто использовать математическую библиотеку C в любом приложении Cocoa / Cocoa Touch:

#import <math.h>

...

double _param = 7.389;
NSNumber *_result = [NSNumber numberWithDouble:log(_param)];

Это та же история для NSDecimalNumber, который является подклассом NSNumber:

Вы можете рассмотреть интерфейс C, если вам не нужно обрабатывать десятичные числа как объекты - то есть, если вам не нужно хранить их в объектно-ориентированной коллекции, такой как экземпляр NSArray или NSDictionary. Вы также можете рассмотреть интерфейс C, если вам нужна максимальная эффективность. Интерфейс C работает быстрее и использует меньше памяти, чем класс NSDecimalNumber.

2 голосов
/ 27 октября 2009

Либо вы используете функцию C log(), которая жертвует некоторой точностью при преобразовании десятичных чисел в двоичные. Или вы ищете библиотеку десятичных чисел. Cocoadev предлагает несколько предложений , особенно утилиту bc и библиотеку GNU Multiple Precision Aрифметики .

0 голосов
/ 27 октября 2009

Семейство функций log() - ваш лучший выбор. Справочная страница доступна здесь .

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