量化地说,正如其他答案所指出的那样,差别在于类型double
的精度大约是类型float
的两倍,范围大约是它的三倍(取决于如何计算)。
但也许更重要的是质量的不同。类型float
具有良好的精度,这通常对您所做的任何事情都足够好。另一方面,类型double
具有优秀的精度,这几乎总是足够好的,无论您做什么。
结论是,很少有人知道的是,你应该几乎总是使用类型 double
。 除非你有特别特殊的需求,否则几乎永远不要使用类型 float
。
As everyone knows, "roundoff error" is often a problem when you re doing floating-point work. Roundoff error can be subtle, and difficult to track down, and difficult to fix. Most programmers don t have the time or expertise to track down and fix numerical errors in floating-point algorithms — because unfortunately, the details end up being different for every different algorithm. But type double
has enough precision such that, much of the time, you don t have to worry.
You ll get good results anyway. With type float
, on the other hand, alarming-looking issues with roundoff crop up all the time.
而在float
类型和double
类型之间不一定不同的东西是执行速度。在今天大多数通用处理器上,float
类型和double
类型的算术运算需要大致相同的时间。一切都是并行完成的,因此您不需要因double
类型的更大范围和精度而付出速度惩罚。这就是为什么安全地建议您几乎从不使用float
类型:使用double
类型不应该在速度上花费您任何东西,在空间上它也不应该花费您很多,而且它几乎肯定会在解决精度和舍入误差问题方面有很好的收益。
(尽管如此,但你可能需要的“特殊需求”之一,是你重新对缩微控制器进行嵌入式工作,或为万国邮联优化的书写代码。) 在这些处理器上,<代码>杜布尔代码>可大大放慢,或实际上不存在,因此,在这些情况下,方案人员通常选择速度的<代码>float,并且可能要准确支付。