NSNumber和NSDecimalNumber的自然对数方法

Bri*_*tle 2 iphone math cocoa objective-c

我有一些C#代码,我正在转换为Objective-C.在C#中我会调用Math.Log().我正在慢慢地了解到有些人坚持使用C函数/类型,并且当他们需要与Cocoa互操作时才使用NSNumber等.

ObjC/Cocoa是否有等价物,或者我需要进入C才能做到这一点?我需要我的代码尽可能准确,因为它是计算器的一部分.

如果这有什么不同,这个代码需要在iPhone上运行.

Ale*_*lds 5

NSNumber是用于存储在有用NSArrayNSDictionary,或在核心数据存储.

您不希望NSNumber用于算术,仅当您需要在某处存储该数字时才能与基础或核心数据类一起使用.

这是因为你必须不断地转换之间NSNumber和原始类型,如int,double,long执行算术运算时,等等.使用基本类型的操作达到所需的准确度,然后创建一个NSNumber实例(如果确实需要).

尽管如此,在任何Cocoa/Cocoa Touch应用程序中使用C数学库都是相当简单的:

#import <math.h>

...

double _param = 7.389;
NSNumber *_result = [NSNumber numberWithDouble:log(_param)];
Run Code Online (Sandbox Code Playgroud)

这是同一个故事NSDecimalNumber,它是以下的子类NSNumber:

如果您不需要将十进制数字视为对象,可以考虑使用C接口,也就是说,如果您不需要将它们存储在面向对象的集合中,如NSArray或NSDictionary的实例.如果您需要最高效率,也可以考虑C接口.C接口比NSDecimalNumber类更快并且使用更少的内存.

  • `NSDecimalNumber`实现了一些基本的数学函数.可悲的不是对数. (3认同)