浮点数末尾的圆点是否表示缺乏精度?
Does the dot in the end of a float suggest lack of precision?
当我在vsc++中调试我的软件时,通过步进代码,我注意到一些浮点数计算显示为带有尾随点的数字,即:
1232432.
导致此结果的一个操作是:
float result = pow(10, a * 0.1f) / b
,其中a是一个大的负数,大约在-50到-100之间,b通常在1左右。我读过一些关于浮点精度问题的文章。我的问题是,如果后面的点是visual studio的一种方式,告诉我这个数字的精度非常低,即在变量结果中。如果不是,这意味着什么?
今天在工作中出现了这个问题,我记得对于较大的数字有一个问题,所以每次都发生这个问题(这里的"This"是指后面的点)。但我确实记得,当数字是七位数时,它就发生了。这里他们指出浮点数的精度是7位:
c++ Float除法和精度
这就是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
,他们修剪了不必要的尾随零,或 - 所有内容都被四舍五入到7位有效数字(在这种情况下,真值也可能是1232431.5,1232431.625,1232431.75,1232431.875,1232432.125,1232432.25,1232432.375或1232432.5。)
真正的问题是,为什么使用float
?double
是C(++)中的"正常"浮点类型,float
是内存节省的优化。
& # 42;书呆子们会很快指出异常值,x87 80位中间值等。
精度不是可变的,这只是VS如何格式化它以显示。对于给定的浮点数,精度(或缺少精度)总是恒定的。
您链接到的MSDN页面讨论了源代码中浮点文字的语法。它没有定义你使用的工具显示数字的方式。如果您使用printf
或std:cout << ...
打印浮点数,语言标准将指定如何打印它。
如果你在调试器中打印它(这似乎是你正在做的),它将以调试器开发人员决定的任何方式格式化。
给定的浮点数有多种不同的显示方式:1.0
、1.
、10.0E-001
和.1e+1
都表示完全相同的含义。后面的.
通常不会告诉您任何关于精度的信息。我的猜测是调试器的开发人员只是使用1232432.
而不是1232432.0
来节省空间。
如果您看到某些值的末尾是.
,而其他值的末尾是一个没有.
的十进制数,这听起来像是调试器中的一个奇怪的故障(可能是错误)。
如果你想知道实际的精度是多少,对于IEEE 32位float
(现在大多数计算机使用的格式),1232432.0
之前和之后的下一个可表示的数字是1232431.875
和1232432.125
。(使用double
而不是float
可以获得更好的精度)
- 表示"accepting anything for this template argument" C++概念的通配符
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 如何将ampl中的集合表示为c++中的向量
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- std::is_base_of表示ctor编译错误
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 有没有办法构造一个 constexpr 函数来获取双精度的位表示
- 双精度表示循环加值
- 使用具有整数表示和 ULP 的混叠正确比较双精度
- 使用定点表示法将双精度转换为字符串,没有尾随零和机智的冲刺
- 将用科学表示法表示的字符串转换为浮点和双精度
- IEEE-754浮点、双精度和四精度是否保证-2、-1、-0、0、1、2的精确表示
- C++双精度/浮点数的内部表示
- 浮点数末尾的圆点是否表示缺乏精度?
- 双精度的精确二进制表示形式
- 双精度和基点的表示
- 将表示小数的 int 转换为双精度的正确方法是什么
- 浮点-如果一个实数可以用双精度表示,我如何编写一个返回true的C++函数