浮点数末端的点是否表示缺乏精确度?

Tho*_*son 5 c++ floating-point visual-studio floating-point-precision

当我通过步进代码在VS C++中调试我的软件时,我注意到一些浮点计算显示为带有尾点的数字,即:

1232432.
Run Code Online (Sandbox Code Playgroud)

导致此结果的一个操作是:

float result = pow(10, a * 0.1f) / b
Run Code Online (Sandbox Code Playgroud)

其中a是-50到-100左右的大负数,b最常见的是1.我在浮点数时读过一些关于精度问题的文章.我的问题是,如果尾随点是Visual-Studio方式,告诉我该数字的精度非常低,即在变量结果中.如果没有,这是什么意思?

今天出现了这个问题,我记得大数字存在问题所以每次都会发生这种情况(并且"这个"我指的是尾随点).但我确实记得它发生在数字中有七位数时.他们在这里怀疑浮点数的精度是七位数:

C++浮点除法和精度

这可能是事情,Visual Studio通过在最后添加一个点告诉我这个吗?

我想我发现了它!它说"尾数被指定为一个数字序列,后跟一个句号".尾数是什么意思?这可以在PC上以及在DSP上运行代码时有所不同吗?因为事情是我得到了不同的结果,唯一对我来说很奇怪的是这个时期的东西,因为我不知道它意味着什么.

http://msdn.microsoft.com/en-us/library/tfh6f0w2(v=vs.71).aspx

dan*_*n04 4

float如果您指的是“sig Figs”约定,其中“4.0”表示 4±0.1,“4.00”表示 4±0.01,那么不, or中没有这样的概念double。数字总是*以 24 或 53 个有效位(7.22 或 15.95 个十进制数字)存储,无论有多少位实际上是“有效”的。

尾随点只是一个小数点,后面没有任何数字(这是合法的 C 文字)。这要么意味着

  • 该值是1232432.0并且他们修剪了不必要的尾随零,或者
  • 所有内容均四舍五入为 7 位有效数字(在这种情况下,真实值也可能是 1232431.5、1232431.625、1232431.75、1232431.875、1232432.125、1232432.25、1232432.375 或 1232432.5。)

真正问题是,你为什么使用floatdouble是 C(++) 中的“正常”浮点类型,并且是float一种节省内存的优化。

* 学究们会很快指出非正规数、x87 80 位中间值等。