如何确定是否需要float或double?
给定一个真正的价值,我们可以检查一个float
数据类型是否足以存储该数字,或者是否需要double
?
我知道精度因架构而异。 是否有任何C / C ++函数来确定正确的数据类型?
有关背景知识,请参阅每位计算机科学家应了解的浮点运算
不幸的是,我不认为有什么方法可以使决策自动化。
通常,当人们用浮点数表示数字而不是字符串时,其意图是用数字进行算术运算。 即使所有输入符合给定浮点类型并具有可接受的精度,您仍然必须考虑舍入误差和中间结果。
在实践中,大多数计算将使用64位类型以足够的精度来处理可用结果。 许多计算仅使用32位不会得到可用的结果。
在现代处理器中,总线和算术单元的宽度足以提供32位和64位浮点类似的性能。 使用32位的主要动机是在存储非常大的阵列时节省空间。
这导致了以下策略:
如果数组的大小足以证明花费大量的努力来减小它们的大小,那么做分析和实验来决定32位类型是否提供了足够好的结果,并且如果使用它的话。 否则,请使用64位类型。
我认为你的问题预设了一种方法来指定任何“实数”C / C + +(或任何其他程序)没有精确度损失。
假设你通过代码或通过用户输入指定了这个实数, 一种检查一个float或double是否足够存储它的方法不会造成精确度损失,只是计算有效位的数量并根据数据范围检查float和double。
如果该数字是以表达式(即1/7
或sqrt(2)
)给出的,那么您还需要检测以下方法:
此外,还有数字,比如0.9
,float / double在理论上不能代表“完全”),至少在我们的二进制计算范例中是如此) - 请参阅Jon Skeet在这方面的出色答案。
最后,请参阅float和double的其他讨论。
一个非常详细的帖子,可能会或可能不会回答你的问题。
整个系列浮点复杂!
链接地址: http://www.djcxy.com/p/78627.html上一篇: how to determine whether float or double is required?
下一篇: Convert a string to float in Objective C without rounding it.?