热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++:编译器是否优化整数+浮点算术运算?

如何解决《C++:编译器是否优化整数+浮点算术运算?》经验,为你挑选了1个好方法。

编译器是否有权甚至能够优化算术运算,其中一方是整数类型,而另一方是浮点数?或者,在100%的情况下执行操作之前,整数是否会被提升为浮点数?

我问的原因是因为我喜欢为了清晰起见而自己执行浮动促销,但如果它保留了编译器可以利用的情况,我可能会停止这样做.



1> Eric Postpis..:

在其中编译器可以优化之间的加成情况下float和一个整数,如优化3.f + 14,而不是执行添加在运行时,我希望铸造的存在下对编译器是否可以优化没有影响.

这是一个基于现代编译器工作方式的一般性陈述,而不是逻辑上的必要性.在编译器认识到某些f + i可以被优化的情况下,对于某些float f和某些整数i(可能是常量或表达式,而不仅仅是标识符),f + (float) i在编译器的分析中应该是等效的并且应该接收相同的优化.

明白为什么这是一个方法是,在解析f + i时,编译器会认识到,i必须转换为float,它将构建,在程序的内部表示,语句得到f,拿i,转换ifloat,并加入他们.在分析时f + (float) i,将构建相同的内部表示,因此这两个语句将是等效的.

也就是说,我希望编译器可以优化的情况可能相当有限.编译器可以识别特定情况,例如添加两个常量,向float整数添加零,以及向a添加整数零float.有时编译器可能能够推导出值f,i即使它们是表达式或标识符,而不是常量,因为先前代码的流必然产生一些值,然后它可能能够根据推导的值进行优化.

因此,可以识别特殊情况.我不希望编译器能够通常f + i变成任何类型的优化位 - 比浮点加法(或编译器通常使用的任何指令)更快.然而,从理论上讲,它可能会发生,如果是这样,一个设计良好的编译器应该优化f + i相同的f + (float) i.(也许有一些C实现在软件中支持浮点支持,而不是硬件,它可以以比添加两个浮点值的更快的方式处理浮点值和整数的添加.)


推荐阅读
author-avatar
孜雪颖2000
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有