给定一个实际值,我们是否可以检查float数据类型是否足以存储数字,或者是否需要double?
我知道精确度因架构的不同而不同。有没有什么C/C++函数来确定正确的数据类型?
发布于 2012-11-29 17:09:09
有关背景信息,请参阅What Every Computer Scientist Should Know About Floating-Point Arithmetic
不幸的是,我不认为有任何方法可以自动做出决定。
通常,当人们用浮点数而不是字符串来表示数字时,其意图是使用数字进行算术运算。即使所有输入都适合给定的浮点类型,并且精度可接受,您仍然必须考虑舍入误差和中间结果。
在实践中,大多数计算将以足够的精度工作,以获得可用的结果,使用64位类型。许多计算仅使用32位将无法获得可用的结果。
在现代处理器中,总线和算术单元的宽度足以提供32位和64位浮点运算类似的性能。使用32位的主要动机是在存储非常大的数组时节省空间。
这导致了以下策略:
如果数组足够大,有理由花费大量精力将其大小减半,请进行分析和实验,以确定32位类型是否提供足够好的结果,如果是,则使用它。否则,请使用64位类型。
发布于 2012-11-29 15:14:59
我认为你的问题假设了一种在不损失精度的情况下为C/ C++ (或任何其他程序)指定任何“实数”的方法。
假设您通过在代码中或通过用户输入指定实数来获得此实数;检查浮点数或双精度数是否足以在不损失精度的情况下存储它的一种方法是,只计算有效位数,并根据浮点数和双精度数的数据范围进行检查。
如果数字是以表达式(即1/7或sqrt(2))的形式给出的,那么您还需要检测的方法:
如果数是有理数,则为repeating decimals, or cyclic decimals.
,则为
更重要的是,有一些数字,比如0.9,浮点数/双精度数在理论上不能表示“确切”),至少在我们的二进制计算范例中不是)-请参阅Jon Skeet's excellent answer on this.
https://stackoverflow.com/questions/13620481
复制相似问题