假设我正在编写一个"DayData“类,其中包含ivars
NSString *symbol; //such as "AAPL"
NSString *currency; //such as "USD"
NSDate *day;
double open;
double high;
double low;
double close;最后四个ivars是当天该股票的开盘价、高价、低价和收盘价。
假设我使用这个类作为数十年,即数千天的历史数据密集蒙特卡洛模拟背后的基本构建块类。这意味着我必须在短时间内访问这些ivars数千次,如果不是数百万次,如果不是数十亿次,以使模拟尽可能快。
问:我应该坚持使用double,还是应该继续使用NSDecimalNumber?NSDecimalNumber到底有多快?这里有没有人在密集的科学应用中测试过NSDecimalNumber?
发布于 2010-08-19 10:27:57
比NSDecimalNumber更快的是NSDecimal,它不是Obj-C对象,因此不会产生objc_msgSend的开销,但仍然具有十进制数学的优点。Here是与NSDecimal一起使用的函数。
发布于 2010-08-19 10:43:47
如果您正在处理美元和美分(但总是完整的美分),没有什么比常规的int更快或更高效的了,它计算美分,然后除以100得到美元。
发布于 2010-08-19 10:44:13
正如jtbandes所说,如果你想要速度,你应该使用NSDecimal,NSDecimalNumber是一个围绕NSDecimal的Obj-C对象包装器。NSDecimal是一个用于表示十进制数的结构,它允许您进行不会产生二进制->小数舍入和表示错误的计算。
我会选择double,因为它是一个模拟,其中最后一盎司的精度可能无论如何都不重要(假设您的模拟包括近似值,所以微小的误差不会有太大影响)。您需要注意浮点计算的陷阱-某些类型的操作可能会导致更大的错误,特别是如果两个浮点数的大小非常不同,或者如果您从一个非常接近的数字中减去另一个数字。维基百科上的This page涵盖了一些陷阱。
https://stackoverflow.com/questions/3518125
复制相似问题