当我通过步进代码在VS C++中调试软件时,我注意到一些浮点计算显示为带有尾随点的数字,即:
1232432.
导致此结果的一种操作是:
float result = pow(10, a * 0.1f) / b
其中a在-50到-100之间是一个较大的负数,b在1附近最常见。我读了一些有关浮点数精度问题的文章。我的问题只是尾随点是否是Visual Studio的方式,告诉我该数字的精度非常低,即变量结果中的精度很低。如果没有,那是什么意思?
这在今天起作用,我记得较大的数字存在问题,因此每次都确实发生(而“this”表示尾随点)。但是我确实记得,当数字中有七个数字时就发生了。他们在这里警告浮点数的精度是七个数字:
C++ Float Division and Precision
这可能就是问题吗,Visual Studio通过在最后加一个点来告诉我这一点?
我认为我找到了它!它说:“尾数指定为一个数字序列,后跟一个句点”。尾数是什么意思?在PC上以及在DSP上运行代码时,这可能会有所不同吗?因为事情是我得到了不同的结果,而对我来说唯一使我感到奇怪的是这段时期,因为我不知道这意味着什么。
http://msdn.microsoft.com/en-us/library/tfh6f0w2(v=vs.71).aspx
最佳答案
如果您引用的是“sig figs”约定,其中“4.0”表示4±0.1,而“4.00”表示4±0.01,那么float
或double
中没有这样的概念。数字始终*用24或53个有效位(7.22或15.95十进制数字)存储,无论实际上有多少“有效”。
尾随点只是一个小数点,其后没有任何数字(这是合法的C文字)。要么意味着
1232432.0
,并且它们修剪了不必要的尾随零,或者真正的问题是,为什么要使用
float
? double
是C(++)中的“常规”浮点类型,而float
是节省内存的优化。*助听器会很快指出异常,x87 80位中间值等。