浮点数的表示同样是二进制的,所以10进制下的有限小数用二进制表示时常常变成无限循环小数,从而产生误差。这与精度是多少没有什么关系的,即使用更高精度的double,long double一样也可能出现这样的结果
股识吧

中视金桥市净率多少_C语言中float的精确度是多少?比如我输入12.105 输出却是12.104996 本来四舍五入应该是12.11变成了12.10

  阅读:977次 点赞:63次 收藏:80次

一、C语言中float的精确度是多少?比如我输入12.105 输出却是12.104996 本来四舍五入应该是12.11变成了12.10

浮点数的表示同样是二进制的,所以10进制下的有限小数用二进制表示时常常变成无限循环小数,从而产生误差。
这与精度是多少没有什么关系的,即使用更高精度的double,long double一样也可能出现这样的结果。
float的精度在不同的编译环境下也可能是不同的,一般是7位有效。
楼上的测试明显有问题,VS2022下测过,正是楼主所强调的问题:【误差造成四舍五入变了样!!】以下是测试程序:{ float a = 12.105f;
printf("%4.2f ",a);
system("pause");
return 0;
}怎么办?有办法,你看excel对这个问题的解决就很完美。
但是怎么实现?比较麻烦,建议你直接上网搜搜。
如果嫌麻烦,请换一个方式解决你需要解决的问题吧。
这个问题比较有意思,手痒写了个程序出来:float Power10(unsigned int i) //递归计算10的i次幂{ if(i) { float tRes = Power10(i>;
>;
1);
return tRes * ( (i &;
0x1)? tRes * 10.0f : tRes );
//i转化二进制逻辑尺使用 } else { return 1.0f;
//递归终结,10的0次幂为1 }}float ResX(float a, int x){ float tPower10 = Power10(x);
if(a <;
0) { tPower10 = -tPower10;
//如果是负数,添个负号 } a = (a * tPower10) + 0.5f;
//负数会先被正过来 return (int)a / tPower10;
//最后再负回去}ResX(12.105f, 2)的结果就是12.11了,再printf就没问题了。
解决问题的核心就是我一开始说的二进制表示时的无限循环问题。
当尾数是0.5时就不存在这个问题,因为0.5正好可以被二进制小数无误差表示出来。
所以我先把12.1049999……乘上100,成为1210.5,正因为这个特性,此时误差消失。
然后再加上0.5取整,就得到1211,再除以100就得了结果。
但是写成return (int)((a * tPower10) + 0.5f) / tPower10;
却不行,不是太清楚原因了。
这个方法也不太清楚有多可靠,至少我觉得在有些环境下应该会失效。
先试试看吧。

C语言中float的精确度是多少?比如我输入12.105 输出却是12.104996 本来四舍五入应该是12.11变成了12.10


二、两线城市当初中老师一天工资平均多少钱?

二线城市,当初中老师,如果是市区或者近郊一天工资平均大概在200元左右吧!偏远山区可能会低一些!

两线城市当初中老师一天工资平均多少钱?


三、初中语数英,多少分为优秀?多少分为中等?

语数外 优秀是96-120分 良好是80-95分 及格是72-79分四门小科 优秀85-100 良好70-84 及格60-69

初中语数英,多少分为优秀?多少分为中等?


四、QT语音中收藏和最近访问房间最大限制为多少个?

QT语音中收藏和最近访问房间最大限制为20个房间。

QT语音中收藏和最近访问房间最大限制为多少个?


五、能数码镜头型号中焦距的范围:比如说EF 400mm这种镜头的范围是多少,高手详细解说下!

数码相机中,我说的是单反,有APS和全幅,还有奥林巴斯的43系统,它们的“胶片”也就是CMOS大小不一样,简单说,一个普通胶片大小的CMOS(全幅的,比如佳能5D2),上面拧一个50mM的镜头,那么扔到APS机身上就是50*1.5=75MM,在43系统上就是*2=100,因为感光元件大小不一样。
全幅跟胶片一样大,所以很多老镜头拿来就用,没有焦距的转换,而且全幅的感光元件大,带来了更好的成像以及更贵的 价格。


APS镜头,比如一些套头,18-55,18-200这样的,都要乘以1.5看(因为胶片时代对应的镜头焦距深入人心),这种镜头装到全幅相机上四周有黑圈看似跑题了,这个铺点在数码上少不了。
用全幅相机说事(比如尼康D3,D700,索尼A900,佳能5DMARK2),比如24MM的广角镜头,50MM的标头,85MM的人像头或者400MM的炮,你说的EF400MM,EF是佳能的卡口还是啥,焦距就是400MM,它是不能变焦的,再说泥坑的镜头,比如AFS24-70,这个焦距就是24-70,至于几倍就自己除一下吧,当然这是放在了全幅相机上,如果放在像D300这样的APS上就乘以1.5计算焦距越长就越像望远镜,越短能“装下”的景色就越多,当然这不是全部,还有透视关系等等,什么压缩感什么的。
凡是XX-XX MM的就都是变焦头,通过拧变焦环就可以“拉近”“推远”,凡是XX或者XXXMM的就是定焦头,你只能通过走路来控制画面里装多少东西。
那为什么还有定焦头呢?定焦头的结构比变焦头简单,最直接的就是可以拥有大光圈,比如各家都有的50 1.4,变焦头想做出1.4的光圈简直一定是不可能的,你像24-70这样的镜皇都是2.8的。
其次,定焦头由于结构简单,光学损失小,画质高,变焦越大损失也越大。
然后就比如50MM的镜头,经历了多年的磨练,设计非常成熟等等等等原因(尼康的50 1.8就很不错,体积小画质不低)。
变焦头最大的优点就是方便。

能数码镜头型号中焦距的范围:比如说EF 400mm这种镜头的范围是多少,高手详细解说下!


六、开心网001买房子中最高等级的工种有多少钱

开心网改了,现在最高的就是3000元/天.
满意的加为最佳答案啊!

开心网001买房子中最高等级的工种有多少钱


七、从1,3,5,7,9中任取3个数字,从2,4,6,8中任取2个数字,一共可以组成多少个没有重复数字的五位数

从1,3,5,7,9中任取3个数字有C35种方法,从2,4,6,8中任取2个数字有C24种方法,再把取出的5个数全排列共有C35C?24?A55=7200故一共可以组成7200个没有重复数字的五位数.

从1,3,5,7,9中任取3个数字,从2,4,6,8中任取2个数字,一共可以组成多少个没有重复数字的五位数


参考文档

下载:中视金桥市净率多少.pdf《当股票出现仙人指路后多久会拉升》《股票停盘复查要多久》《亿成股票停牌多久》《股票订单多久能成交》下载:中视金桥市净率多少.doc更多关于《中视金桥市净率多少》的文档...
我要评论