将CGFloat设置为double可以安全吗?

时间:2016-03-07 20:19:53

标签: 32bit-64bit ieee-754 cgfloat

我在64位设备上运行以下代码:

CGFloat myFloat = 123.45f;
CGFloat myDouble = 123.45;

这对32位和64位设备是否安全?由于CGFloat会根据处理器体系结构更改大小,因此给定变量在两个平台上是否都包含接近123.45的值,或者由于位不正确而导致它们爆炸?

这两件事之一可以发生吗?

64位:

myFloat  == 0x0000000042F6E666 == 5.5507143600000000e-315
myDouble == 0x405EDCCCCCCCCCCD == 123.45

32位:

myFloat  == 0x42F6E666 == 123.45
myDouble == 0xCCCCCCCD == -1.0737418e8

现在,我还没有在现场看到这个......这产生了我的另一个问题:为什么我没有在现场看到这个问题?

1 个答案:

答案 0 :(得分:1)

请记住,您的代码被编译两次,一次用于32位,一次用于64位。

编译32位时,代码如下所示:

float myDouble = 123.45;

所以,你的问题的答案是肯定的,编译器知道如何处理该代码,它会正常工作。

当需要注意的是将64位双精度值分配给32位浮点变量时的精度损失。在这种情况下,编译器将为您生成有关精度损失的警告,但在编译32位版本的代码时只会看到警告。