浮子和双面有什么区别?

浮子和双面有什么区别?

我读过双精度和单精度的区别。然而,在大多数情况下,floatdouble似乎是可互换的,即使用一种或另一种似乎不影响结果。真的是这样吗?什么时候浮动和双打是可互换的?他们之间有什么不同?



白猪掌柜的
浏览 390回答 3
3回答

慕侠2389804

以下是标准C99(ISO-IEC 9899 6.2.5§10)或C+2003(ISO-IEC 14882-2003 3.1.9§8)所述:有三种浮点类型:float, double,和long double..类型double提供的精度至少与float,以及类型long double提供的精度至少与double..类型的值集。float类型的值集的子集。double;类型的值集。double类型的值集的子集。long double.C+标准补充如下:浮点类型的值表示是实现定义的.我建议你看看关于浮点算法,每个计算机科学家都应该知道些什么?这涵盖了ieee浮点标准的深度。您将了解表示细节,您将意识到在大小和精度之间存在权衡。浮点表示的精度随着数量级的减小而增加,因此-1和1之间的浮点数是精度最高的。

慕桂英3389331

给出一个二次方程:x2−4.0000000x+3.9999999=0,10个有效数字的确切根是,r1=2.000316228和r2&nbsp;=&nbsp;1.999683772.使用float和double,我们可以编写一个测试程序:#include&nbsp;<stdio.h>#include&nbsp;<math.h>void&nbsp;dbl_solve(double&nbsp;a,&nbsp;double&nbsp;b,&nbsp;double&nbsp;c){ &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;d&nbsp;=&nbsp;b*b&nbsp;-&nbsp;4.0*a*c; &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;sd&nbsp;=&nbsp;sqrt(d); &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;r1&nbsp;=&nbsp;(-b&nbsp;+&nbsp;sd)&nbsp;/&nbsp;(2.0*a); &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;r2&nbsp;=&nbsp;(-b&nbsp;-&nbsp;sd)&nbsp;/&nbsp;(2.0*a); &nbsp;&nbsp;&nbsp;&nbsp;printf("%.5f\t%.5f\n",&nbsp;r1,&nbsp;r2);}void&nbsp;flt_solve(float&nbsp;a,&nbsp;float&nbsp;b,&nbsp;float&nbsp;c){ &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;d&nbsp;=&nbsp;b*b&nbsp;-&nbsp;4.0f*a*c; &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;sd&nbsp;=&nbsp;sqrtf(d); &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;r1&nbsp;=&nbsp;(-b&nbsp;+&nbsp;sd)&nbsp;/&nbsp;(2.0f*a); &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;r2&nbsp;=&nbsp;(-b&nbsp;-&nbsp;sd)&nbsp;/&nbsp;(2.0f*a); &nbsp;&nbsp;&nbsp;&nbsp;printf("%.5f\t%.5f\n",&nbsp;r1,&nbsp;r2);}&nbsp;&nbsp;&nbsp;int&nbsp;main(void){ &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;fa&nbsp;=&nbsp;1.0f; &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;fb&nbsp;=&nbsp;-4.0000000f; &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;fc&nbsp;=&nbsp;3.9999999f; &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;da&nbsp;=&nbsp;1.0; &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;db&nbsp;=&nbsp;-4.0000000; &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;dc&nbsp;=&nbsp;3.9999999; &nbsp;&nbsp;&nbsp;&nbsp;flt_solve(fa,&nbsp;fb,&nbsp;fc); &nbsp;&nbsp;&nbsp;&nbsp;dbl_solve(da,&nbsp;db,&nbsp;dc); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}运行这个程序会给我:2.00000&nbsp;2.000002.00032&nbsp;1.99968请注意,这些数字并不大,但您仍然可以使用float.(事实上,上述方法并不是使用单精度或双精度浮点数求解二次方程的最佳方法,但即使使用更稳定的方法.)
打开App,查看更多内容
随时随地看视频慕课网APP