keil中,int向double赋值精度出错,求解决!

时间:2022-10-01 16:21:52
#include<reg51.h>
void main()
{
char c;
int i;
double d=16.8,t=16.000000;

c=(int)d;
i=(int)d;
i=i-c;   //char向int赋值,结果=0,没出错
i=(int)d;
d=d-i;   //int向double赋值,结果为0.7999992,出错了
d=16.8;
d=d-c;   //结果同上,出错
d=16.8;
d=d-t;   //奇怪的是,这个结果也和上面一样出错
}

6 个解决方案

#1


不知道你用的是什么编译器,我用VC6测试了一下没有说的问题
double有15-16位的精度,不应该出这样的问题
float只有7位,倒有可能这样

#2


嗯 对  在vc中是没问题,我用的是keil 2版本  
我把keil4 也一样 

#3


keil没用过
刚才在网上搜索了一下,据说是keil没有double只有float,好像是说就是定义为double系统里也是
按照float处理

#4


float 试过 也不行  真不好办  
  这样  计算显示的数据就完全错了  
  

#5


主要在于二进制能否准确的表达浮点数

#6


就是float不行,float只有6-7位的精确度0.7999992刚好7位所以有出错的可能
keil里的double相当于float所以才出现你的情况啊
网上说要搞高精度的要自己找库用或者自己写程序实现

#1


不知道你用的是什么编译器,我用VC6测试了一下没有说的问题
double有15-16位的精度,不应该出这样的问题
float只有7位,倒有可能这样

#2


嗯 对  在vc中是没问题,我用的是keil 2版本  
我把keil4 也一样 

#3


keil没用过
刚才在网上搜索了一下,据说是keil没有double只有float,好像是说就是定义为double系统里也是
按照float处理

#4


float 试过 也不行  真不好办  
  这样  计算显示的数据就完全错了  
  

#5


主要在于二进制能否准确的表达浮点数

#6


就是float不行,float只有6-7位的精确度0.7999992刚好7位所以有出错的可能
keil里的double相当于float所以才出现你的情况啊
网上说要搞高精度的要自己找库用或者自己写程序实现