在我的编程经验中,我经常需要决定是否对实数使用float或double。有时我会选择浮动,有时我会选择双重,但这确实让我感觉更加主观。如果我要捍卫自己的决定,我可能不会给出合理的理由。
什么时候使用float和什么时候使用double?仅当存在内存限制时,您才总是使用double吗?或者,除非精度要求要求您使用double,否则您始终使用float?浮点数和双精度数之间关于基本算术的计算复杂度是否存在实质性差异?使用float或double的利弊是什么?你甚至用过长双吗?
在我的编程经验中,我经常需要决定是否对实数使用float或double。有时我会选择浮动,有时我会选择双重,但这确实让我感觉更加主观。如果我要捍卫自己的决定,我可能不会给出合理的理由。
什么时候使用float和什么时候使用double?仅当存在内存限制时,您才总是使用double吗?或者,除非精度要求要求您使用double,否则您始终使用float?浮点数和双精度数之间关于基本算术的计算复杂度是否存在实质性差异?使用float或double的利弊是什么?你甚至用过长双吗?
Answers:
浮点类型的默认选择应为double
。这也是您使用浮点直接获得一个不带后缀或(C语言),关于浮点数(如操作标准功能类型exp
,sin
等等)。
float
仅在需要对大量浮点数进行操作(应考虑成千上万或更多)时才应使用此方法,并且对该算法的分析表明,减小的范围和精度不会带来问题。
long double
如果您需要比更大的范围或精度double
,并且可以在目标平台上提供此功能,则可以使用。
总之,float
和long double
应该由专家来保留使用,以double
用于“每一天”使用。
float
(有时是半精度),因为人眼,显示器或色彩系统都没有那么多精度。此建议适用于OpenGL等。此附加建议不适用于对精度要求更高的医学图像。
在针对现代计算机的代码中,很少有理由使用float而不是double。额外的精度减少(但不能消除)舍入误差或其他不精确性引起问题的机会。
我可以想到使用float的主要原因是:
因此,基本上,除非您有硬件限制,或者除非分析表明存储双精度数字对内存使用有重大贡献,否则双精度是必经之路。
某些平台(ARM Cortex-M2,Cortex-M4等)不支持double(始终可以在处理器的参考手册中对其进行检查。如果没有编译警告或错误,并不表示代码是最佳的。可以模拟double。)。这就是为什么您可能需要坚持int或float的原因。
如果不是这种情况,我将使用double。
您可以查看D. Goldberg着名的文章(“每位计算机科学家应了解的浮点运算法则”)。在使用浮点运算之前,您应该三思。在您的特定情况下,根本不需要它们的可能性很大。
在float和double之间使用哪个变量的选择取决于所需数据的准确性。如果要求答案与实际答案的差异可以忽略不计,则所需的小数位数将很多,因此将决定使用双精度数。浮点数会切掉某些小数位部分,从而降低准确性。
通常,float
当我不需要太多精度时(例如为了赚钱),我会使用该类型,这是错误的,但是我习惯于这样做。
另一方面,double
当我需要更高的精度时,例如复杂的数学算法,我会使用它。
C99标准说:
共有三种浮点类型:float,double和long double。double类型提供的精度至少与float相同,而long double类型提供的精度至少与double一样。float类型的值集是double类型的值集的子集;double类型的值集合是long double类型的值集合的子集。
我从没真正使用过long double
,但是我没有那么多地使用C / C ++。通常,我使用动态类型化的语言(例如Python),而不必在乎这些类型。
有关Double vs Float的更多信息,请参见SO的问题。
Decimal
是浮点类型,通常是货币计算的不错选择。