在float和double之间重复投射是否存在任何开销

时间:2012-02-10 14:03:42

标签: objective-c compiler-construction llvm

混合各种框架和库我经常看到像这样的代码

float floatValue = 0.5f;
float returnValue = 0.0f;

returnValue = (float)[object someMethod:(double)floatValue]; //returns double

doublefloat之间来回转换是否有任何开销?

我主要对编译器感兴趣,但很乐意为其他语言和编译器投票答案。

2 个答案:

答案 0 :(得分:4)

floatdouble之间的转换是ARM和x86上任一方向的单个转换指令。在某些情况下,编译器能够消除这些转换(当它可以证明它们不会影响计算结果时),但在您列出的示例中不会出现这种情况。

因此,存在少量开销。在高级接口边界处的一些额外强制转换将不会产生明显的效果。但是,如果可以避免,则不希望在紧密循环中转换每个值。

答案 1 :(得分:3)

是的,存在开销,因为强制转换会导致转换。 cpu中的格式不同。

担心这一点并编写代码以减少它是“预成熟优化”,只是不这样做。如果存在性能问题,请使用仪器,找到并修复。 “最佳实践”是编写最清晰的代码。