iPhone / iPad的双精度math

这个社区Wiki问题的接受答案: 在编写Objective-C和Cocoa时,您使用的最佳实践是什么? 说,iPhone不能做双精度math(或者说,他们可以,但只能在软件中模拟)。不幸的是,它提供的2009年的链接作为参考: iPhone上的双重浮动与浮动直接矛盾的声明。 这两个都是旧的,写在3GS刚出来的时候。

那么最新的arm7架构有什么故事呢? 我是否需要担心第二个链接引用的“拇指”编译器标志? 我可以安全地使用doublevariables吗? 386SX和DX以及“math协同处理器”的黑暗时代,我正在讨厌的倒叙。 告诉我,这是2012年,我们已经移动。

在所有的iPhone中,没有理由不应该支持双精度。 它们都使用Cortex-A8架构和cp15协处理器(它支持IEEE浮点和双硬件计算)。

http://www.arm.com/products/processors/technologies/vector-floating-point.php

所以是的,你可以安全地使用双打,它不应该是iPhone上的软件模拟。 尽pipe这是在硬件上完成的,但是执行双倍数字算术与单个(浮点数)仍然需要更多的周期。 除了使用double之外,我还会检查以确保精度适合您的应用程序。

作为一个方面说明,如果处理器支持NEON指令集,双倍和浮点运算可能比使用协处理器快。

http://pandorawiki.org/Floating_Point_Optimization#Compiler_Support

编辑:虽然VFP和霓虹是ARM内核的可选扩展,但大部分的cortex-A8都具有它们,而iPhone和iPad中使用的也都是这样。