首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密集科学应用的NSDecimalNumber?

密集科学应用的NSDecimalNumber?
EN

Stack Overflow用户
提问于 2010-08-19 09:44:00
回答 3查看 411关注 0票数 0

假设我正在编写一个"DayData“类,其中包含ivars

代码语言:javascript
复制
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?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-19 10:27:57

NSDecimalNumber更快的是NSDecimal,它不是Obj-C对象,因此不会产生objc_msgSend的开销,但仍然具有十进制数学的优点。Here是与NSDecimal一起使用的函数。

票数 2
EN

Stack Overflow用户

发布于 2010-08-19 10:43:47

如果您正在处理美元和美分(但总是完整的美分),没有什么比常规的int更快或更高效的了,它计算美分,然后除以100得到美元。

票数 1
EN

Stack Overflow用户

发布于 2010-08-19 10:44:13

正如jtbandes所说,如果你想要速度,你应该使用NSDecimalNSDecimalNumber是一个围绕NSDecimal的Obj-C对象包装器。NSDecimal是一个用于表示十进制数的结构,它允许您进行不会产生二进制->小数舍入和表示错误的计算。

我会选择double,因为它是一个模拟,其中最后一盎司的精度可能无论如何都不重要(假设您的模拟包括近似值,所以微小的误差不会有太大影响)。您需要注意浮点计算的陷阱-某些类型的操作可能会导致更大的错误,特别是如果两个浮点数的大小非常不同,或者如果您从一个非常接近的数字中减去另一个数字。维基百科上的This page涵盖了一些陷阱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3518125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档