我有一些框架代码可以做到这一点:
#ifdef USE_DOUBLE
typedef double real;
#else
typedef float real;
#endif
但是当USE_DOUBLE
定义(如此真实==双重)时,我试图使用此类型,如下所示:
- (id) initSomeObject:(real)arg andSomeOtherStuff:(id)thing
{
self = [super init];
if (self)
{
field = arg;
}
}
[someObject initSomeObject:2.0 andSomeOtherStuff:nil];
arg
值完全被删除,显示为5.3 ... e-315。 但,如果我关闭USE_DOUBLE
关闭,2.0
的值就会完美无缺。这是在最新的iOS 5+,在iPhone 4上使用Xcode 4.3.3和LLVM 3.1。iOS不能很好地处理双打吗?我的USE_DOUBLE
标志是否总是不合格?
答案 0 :(得分:0)
定义USE_DOUBLE
和类型real
是在我的应用程序使用的静态库中定义的。事实证明USE_DOUBLE
需要设置为框架中的相同值,并且客户端应用程序中的typedef
正常工作。似乎我的应用程序被认为是一个单独的编译单元,这意味着它没有定义USE_DOUBLE
,real
是一个浮点数。这导致运行时缩小了我的值的精度并导致意外/未定义的行为。将#define USE_DOUBLE
添加到我的应用程序项目中似乎已经解决了这个问题。