
c++精度问题
c++中对于数值较大的double型数,如1234567890十位以上的数,在进行这种数加减时,程序默认的是以1.23456*10^10这样来算的,书上说的精度设置都是输...
c++中对于数值较大的double型数,如1234567890十位以上的数,在进行这种数加减时,程序默认的是以1.23456*10^10这样来算的,书上说的精度设置都是输出时的精度设置,没有程序编译时的精度设置,有没有方法使程序在运行前就设定好精度呢?
展开
4个回答
展开全部
没有,因为计算机内部浮点数是二进制表示的,必须转换成十进制(BCD,ASCII)表示才可以,使用十进制精度设置。 要想真正控制精度, 除非你自己定义BCD串表示,或者ASCII串表示的十进制数,否则会有表示误差。
当然,你也不必在意表示误差,因为他很小,所以实际计算是可以不必太关心。确实需要关心就用 BCD串表示,或者ASCII串 好了。
不然可以扩展浮点数精度。
当然,你也不必在意表示误差,因为他很小,所以实际计算是可以不必太关心。确实需要关心就用 BCD串表示,或者ASCII串 好了。
不然可以扩展浮点数精度。

2025-04-08 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
展开全部
不是很明白 你的问题,首先可以告诉你一点,运行时候的精度往往是大于输出时的,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不必要关心这种精度, 仅需要关心最终输出结果 ...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你搞混了概念,
1.你可以百度“double类型 在内存中的结构”,你会明白,double在内存中占8个字节,它的格式是IEEE规定了的,就像我们规定桌子叫桌子,你不能叫它板凳,你是无法改变它的。
2.你所说的精度设置,是指他转换成字符串后的一种格式。
举个float的例子,f=123.45678,printf("%.3",f);前一个你无法改变它的格式,后一个只是说输出字符串时保留3位小数,即使你使用scanf(%.3,&f),f在内存中也不可能改变它在内存中的存储格式。
这是两个不同的东西,希望对你有帮助。
附:32位浮点数格式(<计算机硬件基础>1998.7,高教出版社,邹逢兴)
31位:符阶+30~24位:阶码+23位:数符+22~0位:尾数。
1.你可以百度“double类型 在内存中的结构”,你会明白,double在内存中占8个字节,它的格式是IEEE规定了的,就像我们规定桌子叫桌子,你不能叫它板凳,你是无法改变它的。
2.你所说的精度设置,是指他转换成字符串后的一种格式。
举个float的例子,f=123.45678,printf("%.3",f);前一个你无法改变它的格式,后一个只是说输出字符串时保留3位小数,即使你使用scanf(%.3,&f),f在内存中也不可能改变它在内存中的存储格式。
这是两个不同的东西,希望对你有帮助。
附:32位浮点数格式(<计算机硬件基础>1998.7,高教出版社,邹逢兴)
31位:符阶+30~24位:阶码+23位:数符+22~0位:尾数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |