Ton*_*ony 9 c++ floating-point double
如何昂贵是一个转换float的double?这int对long转换来说是微不足道的吗?
编辑:我假设一个平台,其中float是4个字节,double是8个字节
Sum*_*uma 11
这取决于用于浮点计算的平台.使用x87 FPU,转换是免费的,因为寄存器内容是相同的 - 您有时可能支付的唯一价格是内存流量,但在许多情况下甚至没有流量,因为您可以简单地使用该值而无需任何转换.x87在这方面实际上是一个奇怪的野兽 - 很难正确区分它上面的浮点数和双精度数,因为使用的指令和寄存器是相同的,不同的是加载/存储指令和计算精度本身是使用状态位控制的.使用混合浮点/双精度计算可能会导致意外结果(并且有编译器命令行选项来控制精确行为和优化策略,因此).
当您使用SSE时(有时Visual Studio默认使用SSE),它可能会有所不同,因为您可能需要在FPU寄存器中传输值或执行明确的操作以执行转换.
作为总结,并在其他地方回答您的评论:如果您想将浮动计算的结果存储到32b存储中,结果将是相同的速度或更快,因为:
在某些平台上浮动到双重转换是免费的(PPC,x86,如果你的编译器/运行时使用"你告诉我使用什么类型的地狱,我将评估所有在long double中的所有东西,nyah nyah"评估模式).
在使用SSE寄存器在指定类型中实际进行浮点计算的x86环境中,float和double之间的转换与浮点加法或乘法一样昂贵(即,除非你是一个性能因素,否则不太可能是性能考虑因素)做了很多).
在缺乏硬件浮点的嵌入式环境中,它们可能有些昂贵.
| 归档时间: |
|
| 查看次数: |
18650 次 |
| 最近记录: |