c/c++语言开发共享在C和Objective-C中,我们应该使用0.5f还是0.5?

我看到作者使用的地方有很多:

sprite.anchorPoint = CGPointMake(1, 0.5f); 

也就是说,为什么不使用0.5代替0.5f – 是否有使用0.5f优势?

    0.5double常数,而0.5ffloat常数。

    使用0.5f有优势吗?

    是。 您要么为计算指定类型(读取:精度),要么避免隐式缩小(以及关联的编译器警告)。

    您提供的示例并不引人注目,除了避免编译器警告或只是对参数类型非常严格。

    然而,对于双倍精度而言,不太明显的促销可能是昂贵的。

    要回答“我们应该使用0.5f还是0.5” :因为每个都有适当的时间,所以你应该在程序中使用两者 。 您应该使用适合您所需的计算/精度的类型,您传递的参数的类型,或者适用于表达式中其他值的类型。 这就像整数一样 – 有适当的时间考虑宽度,并有适当的时间后缀(例如UL )。 有时候区别很重要,而且(很自然地)它不重要。

    常量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

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐