flo*_*fil 20 c++ floating-point double long-double
我仍然是编程的初学者,我总是有比书或互联网搜索更多的问题(除非我错过了什么).所以我提前道歉,如果这个问题得到了解答,但我找不到它.
我知道浮点数的范围小于双倍,因此不太精确,从我的理解,long double更精确(?).所以我的问题是你为什么要首先使用一个不太精确的变量?它与不同的平台,不同的操作系统版本,不同的编译器有关吗?或者在编程中是否有特定的时刻,它在战略上更有利于使用浮动超过双/长双?
感谢大家!
Mat*_*son 26
在几乎所有处理器中,"较小"的浮点数在执行时需要相同或更少的时钟周期.有时差别并不大(或没有),其他时间也可以是字面上的周期数的两倍double对比float.
当然,影响缓存使用的内存占用也是一个因素.float只需要一半的尺寸double,而且long double还要大一些.
编辑:更小的尺寸的另一个副作用是,处理器的SIMD扩展(3DNow!SSE,AVX在86,以及类似的扩展是在几个其他架构可提供)可以或者仅与工作float,或可以采取两倍多float对double(据我所知,long double任何处理器都没有SIMD指令.因此,这是否可以提高性能float,使用与double由一气呵成处理两倍的数据.结束编辑.
因此,假设6-7位精度足以满足您的需要,并且+/- 10 +/- 38的范围就足够了,那么float应该使用.如果您需要更多的数字或更大的范围,请移至double,如果这还不够,请使用long double.但对于大多数事情来说,double应该是完全足够的.
显然,当你有大量的计算或许多数据要处理时,使用"正确的大小"的重要性变得更加重要 - 如果有5个变量,你只需要在一个程序中使用它几次其他一百万件事关心谁?如果你正在对一级方程式赛车在200英里/小时的速度进行流体动力学计算,那么你可能需要计算几千万个数据点,并且每个数据点需要每秒计算几十次汽车行驶,然后在每次计算中额外使用几个时钟周期将使整个模拟显着延长.
使用浮动有两个成本,其中有限的范围和精度是明显的,而且不那么明显,这些限制所带来的分析更加困难.
通常相对容易确定double是足够的,即使在需要进行大量数值分析以显示浮点数足够的情况下也是如此.如果没有正确完成更困难的分析,这可以节省开发成本和不正确结果的风险.
Float在许多处理器上的最大优势是减少了内存占用.这转换为每个缓存行更多的数字,并且就每秒传输的数量而言更多的内存带宽.计算性能的任何提升通常都相对较小 - 实际上,流行的处理器以一种宽于双倍的格式进行所有浮点运算.
除非满足两个条件,否则最好使用double - 有足够数量的内存占用是一个重要的性能问题,开发人员可以证明浮点数足够精确.
| 归档时间: |
|
| 查看次数: |
36845 次 |
| 最近记录: |