【发布时间】:2012-10-16 18:00:26
【问题描述】:
我知道在浮点数和整数之间进行转换时可能会出现错误,但是性能如何(请忽略准确性问题)?
如果我对不同算术类型的操作数(即不同的浮点类型(例如 float 和 double)和浮点/整数类型组合 (例如float 和 int)?是否存在经验法则,例如保持所有操作数的类型相同?
P.S.:我问是因为我正在编写一个表达式模板库,并且想知道是否允许对包含不同算术类型值的向量进行二进制运算。
【问题讨论】:
-
是的,不同类型之间的转换是有成本的。如果我期中回来时没有其他人回答,我可能会给出深入的回答。
-
由于浮点运算在 base-2 算术方面并不重要,编译器通常会发出辅助函数(看看为什么需要 libgcc?),这会严重影响性能。
-
问题是,您的程序不对不同类型的操作数进行 n 元运算。它根据例如促进论点。 C99 的 6.3.1.8 通常的算术转换,然后进行 n 元运算,通常使用相同类型的参数(有一些例外,但没有涉及浮点类型)。
-
@Pascal Cuoq:我知道这些隐式转换,这就是我询问性能的原因。导致它们可能会产生成本,即使一切都可以编译并且工作正常。
-
@user1095108:我知道的最糟糕的成本是在 CPU 中从积分寄存器转移到浮点寄存器。如果你来回讨论它,尤其是。但除非它处于非常紧密的循环中,否则瓶颈更有可能是 CPU RAM 传输。
标签: c++ c performance floating-point