我看到作者使用的地方有很多:
sprite.anchorPoint = CGPointMake(1, 0.5f);
也就是说,为什么不使用0.5
代替0.5f
– 是否有使用0.5f
优势?
0.5
是double
常数,而0.5f
是float
常数。
使用0.5f有优势吗?
是。 您要么为计算指定类型(读取:精度),要么避免隐式缩小(以及关联的编译器警告)。
您提供的示例并不引人注目,除了避免编译器警告或只是对参数类型非常严格。
然而,对于双倍精度而言,不太明显的促销可能是昂贵的。
要回答“我们应该使用0.5f还是0.5” :因为每个都有适当的时间,所以你应该在程序中使用两者 。 您应该使用适合您所需的计算/精度的类型,您传递的参数的类型,或者适用于表达式中其他值的类型。 这就像整数一样 – 有适当的时间考虑宽度,并有适当的时间后缀(例如U
和L
)。 有时候区别很重要,而且(很自然地)它不重要。
常量0.5在Objective-C中声明一个double,将f放在最后 – 0.5f将常量声明为(32位)float。
在Objective-C / Cpost中看一下数字/浮点数后的“f” 。
尾随f
强制常量为单精度float
,因为浮点常量默认为double
s。 这对于之前的一些编译器修订来说更为重要,因为我不认为有双重自动类型转换为浮点数,因为编译器无法确保没有这样做的副作用。 结果是,当只需要单精度浮点寄存器时,许多代码保持f
指定符以避免加载双精度浮点寄存器时的循环。
当双常量适当时使用浮点常量会产生后果,反之亦然:
以上列表并非旨在包罗万象。
另一方面,代码或数据大小很少是个问题。 无法保证无论是编写.5f还是.5,编译器实际上都会存储一个浮点数或一个double。 例如,如果我写“printf(”%g“,3。* 4. + 5。)”,则编译器不需要存储3,4或5.它只需要生成一个写“17的程序” “标准输出,它可以通过存储3,4和5并在运行时进行计算或通过存储17并在运行时将其传递给printf或仅存储字符串”17“并将其写入到带put的标准输出,不存储任何数字或根本不调用printf。
因此,通常,使用哪种类型的重要事项是正确表达您想要执行的计算,而不是担心优化。 如果您编写“foo(.5)”并且foo具有双参数,则编译器可以将.5f存储在程序的常量中并生成代码,在运行时将该.5f加载到双重寄存器并将其传递给foo 。 我希望有一个好的编译器以最小的forms存储常量,可以加载而不需要额外的执行成本。
您还需要考虑0.5在单精度和双精度浮点中都是完全可表示的。 这意味着它们完全相同。 相应格式中可用的有效位数是不重要的,因为值0.5仅需要有效数中的单个位(隐含位),并且所有剩余位都是0。
因此,如果您需要节省存储空间,最好是0.5f。
以上就是c/c++开发分享在C和Objective-C中,我们应该使用0.5f还是0.5?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560802.html