同是Single 为什么C++的小数点后位数与VB不同呢?

jack20042005 2009-01-03 06:08:42
C++得到的小数点后位数很短 而VB很长
VC++中编程几次由于这个问题造成数据判断出错 感觉C++的single/double的精度不如VB的single/double 是不是这样?
...全文
464 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack20042005 2009-01-04
  • 打赏
  • 举报
回复
我声明了一个long double 变量,怎么输出数据的有效数字位数仍然和double的一样 是不是必须在64位系统下才起作用呢?
lann64 2009-01-04
  • 打赏
  • 举报
回复
感觉用有效数字的概念不准确,限于机器字长,float和double只能保证6位和10位精度,但并不能说之后的数字就不是有效数字。
是不是有效数字跟使用、算法、以及具体数字是不是落到浮点表示点上都有关系。
jack20042005 2009-01-04
  • 打赏
  • 举报
回复
以c++的float .VS. VB的single为例.

查了下资料 两者所在内存位数一样,取值范围和有效数字相差不大:
C++的float占4个字节,取值范围10-38~10+38,有6~7位有效数字;
VB的single占4个字节,取值范围10-45~10+38,有7位有效数字;

想了一下,我有标题如此印象,可能是因为:
VB的格式较为灵活 我写数据的时候直接输出计算式(虽然其中参算变量均为single类项),但VB计算出来的结果是按最大的数据类型输出最终数据的,比如为double或者货币类型,因此输出的有效数字很长;
而且VB中文本框内初始输入的内容再长,其实只是字符串的表象,字符串可以很长,但在转化为single或者double时都要被截断的!

而C++格式较严格,也可能我不熟悉,只能把计算式结果赋予一个变量,再以变量的形式输出,而这个变量我在前文声明为float类型,因此在计算式赋值时,有效数字就已经被截断,所以输出后有效数字较短。

这样来说,现在的单精度和双精度虽然可以表示很大的数,但有效数字只有屈指可数的7~15位左右,上下离开小数点游走的范围还不是很宽。以后是要注意有效数字与变量声明的问题了,同时不能只看界面显示,而要看到程序内部数据类项的转换与外部传递。
lann64 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jack20042005 的回复:]
我声明了一个long double 变量,怎么输出数据的有效数字位数仍然和double的一样 是不是必须在64位系统下才起作用呢?
[/Quote]
这个long double到底是多大的长度依赖于cpu和编译器两者。
而且标准也没规定是多少位的。

在vc下,long double跟double一样长,都是8字节;在g++下 long double比 double长。分别是12字节和8字节。
自己用sizeof测试一下就知道了。
xiaoyisnail 2009-01-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 jack20042005 的帖子:]
C++得到的小数点后位数很短 而VB很长
VC++中编程几次由于这个问题造成数据判断出错 感觉C++的single/double的精度不如VB的single/double 是不是这样?
[/Quote]

应该都是根据IEEE的标准来进行浮点数的表示的,楼主估计只是根据输出内容的多少才有这样的感觉的吧
ltc_mouse 2009-01-03
  • 打赏
  • 举报
回复
在内存中的浮点数应该是一样的精度吧~

如果整个操作过程都在内存中进行,没理由VB可以而C++不可以。当然,如果你把数据输出到文件了,并依赖于文件中的浮点数做判断,就可能不一样了。
C/C++的浮点数输出默认是保留到小数点后6位,可以根据需要提高输出精度,如果是pintf,用格式控制中的%m.nf,iostream用setprecision

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧