社区
C++ 语言
帖子详情
同是Single 为什么C++的小数点后位数与VB不同呢?
jack20042005
2009-01-03 06:08:42
C++得到的小数点后位数很短 而VB很长
VC++中编程几次由于这个问题造成数据判断出错 感觉C++的single/double的精度不如VB的single/double 是不是这样?
...全文
464
6
打赏
收藏
同是Single 为什么C++的小数点后位数与VB不同呢?
C++得到的小数点后位数很短 而VB很长 VC++中编程几次由于这个问题造成数据判断出错 感觉C++的single/double的精度不如VB的single/double 是不是这样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
VB
6与V
C++
混合编程实战:DLL交互与字符串处理详解
本文详解
VB
6调用V
C++
编写的DLL实现跨语言交互,重点解决调用约定匹配、C风格函数导出、ANSI/Unicode字符串安全传递、缓冲区管理及类型映射等核心问题。通过字符串拼接实例,完整覆盖V
C++
DLL创建、函数导出配置、
VB
端Declare声明、预分配缓冲区调用、错误处理与部署依赖等关键技术环节,适用于遗留系统维护与性能敏感模块集成。
VB
6表格动态交互:实现可点击删除链接与数据行上移
本文详解在
VB
6环境下,利用MSFlexGrid控件结合TextBox覆盖方案,实现第二列单元格动态显示‘删除’超链接效果。核心包括精准捕获鼠标所在行列、动态定位TextBox、模拟超链接样式(蓝色/下划线/手型光标),以及安全删除目标行并完成数据重排与界面刷新。重点处理固定行排除、坐标计算、数组越界防护及滚动兼容性问题。
VB
学习笔记
本文探讨了从Visual Basic 6.0过渡到Visual Basic .NET的过程中的一些关键变化,特别是关于Caption属性到Text属性的转变,以及.NET框架下
VB
的新特性。
VB
编程中的一些经验 (转)
本文介绍了
VB
编程中的一些实用经验和技巧,包括变量声明、对象管理、字符串处理等方面的知识,并详细解释了如何正确使用字符串处理函数及注意事项。
C++
SIMD性能优化
本文介绍了SIMD(
single
-instruction multiple-data)技术的基本原理及其在
C++
中的应用实践。通过对比标量与矢量浮点运算,展示了SIMD在处理大规模数据集时的性能优势。并提供了具体的代码实现及性能测试结果。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章