为了账号安全,请及时绑定邮箱和手机立即绑定

浮子和双面有什么区别?

浮子和双面有什么区别?

C++
白猪掌柜的 2019-06-28 15:28:10
浮子和双面有什么区别?我读过双精度和单精度的区别。然而,在大多数情况下,float和double似乎是可互换的,即使用一种或另一种似乎不影响结果。真的是这样吗?什么时候浮动和双打是可互换的?他们之间有什么不同?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

以下是标准C99(ISO-IEC 9899 6.2.5§10)或C+2003(ISO-IEC 14882-2003 3.1.9§8)所述:

有三种浮点类型:floatdouble,和long double..类型double提供的精度至少与float,以及类型long double提供的精度至少与double..类型的值集。float类型的值集的子集。double;类型的值集。double类型的值集的子集。long double.

C+标准补充如下:

浮点类型的值表示是实现定义的.

我建议你看看关于浮点算法,每个计算机科学家都应该知道些什么?这涵盖了ieee浮点标准的深度。您将了解表示细节,您将意识到在大小和精度之间存在权衡。浮点表示的精度随着数量级的减小而增加,因此-1和1之间的浮点数是精度最高的。


查看完整回答
反对 回复 2019-06-28
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

给出一个二次方程:x2−4.0000000x+3.9999999=0,10个有效数字的确切根是,r1=2.000316228和r2 = 1.999683772.

使用floatdouble,我们可以编写一个测试程序:

#include <stdio.h>#include <math.h>void dbl_solve(double a, double b, double c){
    double d = b*b - 4.0*a*c;
    double sd = sqrt(d);
    double r1 = (-b + sd) / (2.0*a);
    double r2 = (-b - sd) / (2.0*a);
    printf("%.5f\t%.5f\n", r1, r2);}void flt_solve(float a, float b, float c){
    float d = b*b - 4.0f*a*c;
    float sd = sqrtf(d);
    float r1 = (-b + sd) / (2.0f*a);
    float r2 = (-b - sd) / (2.0f*a);
    printf("%.5f\t%.5f\n", r1, r2);}   int main(void){
    float fa = 1.0f;
    float fb = -4.0000000f;
    float fc = 3.9999999f;
    double da = 1.0;
    double db = -4.0000000;
    double dc = 3.9999999;
    flt_solve(fa, fb, fc);
    dbl_solve(da, db, dc);
    return 0;}

运行这个程序会给我:

2.00000 2.000002.00032 1.99968

请注意,这些数字并不大,但您仍然可以使用float.

(事实上,上述方法并不是使用单精度或双精度浮点数求解二次方程的最佳方法,但即使使用更稳定的方法.)


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 395 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信