标题:关于浮点定义
只看楼主
min624132806
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2017-2-20
结帖率:50%
已结贴  问题点数:8 回复次数:8 
关于浮点定义
#include <stdio.h>
int main (void)
{
    int a,b;
    float x,y;
    a=1,b=5;
    printf("x=");
    scanf("%f",&x);
    y=x>=-10?-a*(b+x):3/((a*a*a+x*x*x)*b);
    printf("%f\n",y);
    printf("%f\n",x<-10?3/((a*a*a+x*x*x)*b):-a*(b+x));
    return 0;
}


类型                位数           有效数字                 取值
 
float               32               6~~7             -1.4e-45~~3.14e38

double              64               15~~16            -4.9e-324~~1.8e308

long double         128              18~~19             ----------


X取值不限,可能在double 范围内取值,就应该定义为double类型,在long double中取值就应该定义为long double ,longdouble取值范围包括float double 取值范围,按理应该定义为long double类型,
为什么X,Y不能定义为double和long double ,定义为这任意类型运算结果会出错。
搜索更多相关主题的帖子: include return 
2017-03-02 22:21
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:2 
回复 楼主 min624132806
只要你不嫌浪费空间  你可以把所有的浮点型都定义为long double  

DO IT YOURSELF !
2017-03-03 06:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:2 
听不懂
2017-03-03 08:22
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:2 
回复 3楼 rjsp
long double 占的内比较大。、、
2017-03-03 21:31
min624132806
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2017-2-20
得分:0 
回复 2楼 wp231957
用long double和float 的运算结果,不一致这是为什么?
2017-03-03 22:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
以下是引用min624132806在2017-3-3 22:35:48的发言:

用long double和float 的运算结果,不一致这是为什么?

1、试试用 %lf 或 %llf 输入输出。
2、注意运算过程和运算结果的数据类型,必要时可强制转换。
2017-03-04 05:56
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用min624132806在2017-3-3 22:35:48的发言:

用long double和float 的运算结果,不一致这是为什么?
你这么说 谁也不知道咋回事  可能一切根源都在于你的。。。。。

编写代码  一切都要用代码来说话

DO IT YOURSELF !
2017-03-04 08:03
min624132806
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2017-2-20
得分:0 
回复 7楼 wp231957
#include <stdio.h>
int main (void)
{
    int a,b;
    float x,y;
    a=1,b=5;
    printf("x=");
    scanf("%f",&x);
    y=x>=-10?-a*(b+x):3/((a*a*a+x*x*x)*b);
    printf("%f\n",y);
    printf("%f\n",x<-10?3/((a*a*a+x*x*x)*b):-a*(b+x));
    return 0;
}


#include <stdio.h>
int main (void)
{
    int a,b;
    double x,y;
    a=1,b=5;
    printf("x=");
    scanf("%f",&x);
    y=x>=-10?-a*(b+x):3/((a*a*a+x*x*x)*b);
    printf("%f\n",y);
    printf("%f\n",x<-10?3/((a*a*a+x*x*x)*b):-a*(b+x));
    return 0;
}

只是两个程序代码,不同在于X,Y定义类型不同,第一个程序用float,类型输出结果正常,第二个用的double类型结果却是0,这是为什么,请给我一个误区的解释,谢谢!
2017-03-09 21:47
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:2 
第二个程序改scanf("%lf",&x);也许是单浮点型和双浮点型的存储和读取方式不一样。

[此贴子已经被作者于2017-3-9 21:57编辑过]

2017-03-09 21:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-474704-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083237 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved