导航:首页 > 源码编译 > 编译器浮点数计算错误

编译器浮点数计算错误

发布时间:2022-04-18 06:01:31

① 请教高手: compaq visual fortran 6.6 的编译器中使用双精度浮点数出现问题


EK
=
-1.1
改为:
EK
=
-1.1D0
或者
EK
=
-1.1_8
既可!
请注意,-1.1
是个常数,常数也有类型。如果单纯的
-1.1,他还是单精度的常数。

-1.1D0

-1.1_8
才是双精度的常数

② c语言浮点型运算错误

给定的输入数据式样中间有逗号分隔吗:scanf("%d,%d",&p,&q);
如果是空格分隔就要改为:scanf("%d%d",&p,&q);这样才行

③ c语言 分数的四则运算为什么显示浮点数运算错误

优先级:括号优先级最高,结合方式从左往右
% * / 是同一优先级,但要高于+ - ,结合方式从左往右
所以说取余与四则运算是同级别是不对的
现在分析你的算式:先不论你的x,y取值 输出结果为0
首先执行() x+y的值被强制转换为整型
其次从左往右执行 a=10 a%3=1 (int)(x+y)%2要么为0 要么为1
如果为0 那么0/4=0
如果为1 1/4等于几呢 1 4都为整数那结果肯定是0
如果说 float m;m = 1 / 4; 那它的结果还是0 不信你可以用编译器调试
那怎么得到0.25呢 把上一句改为 m=1/4.0 结果就为0.25了
希望对你有帮助

④ C语言浮点运算感觉很奇怪同样的数,算出来结果却不一样,这是怎么回事

计算机存储和运算都是以二进制处理的,而表达式是十进制的,那么存储或运算时是要转换成二进制,计算完成后输出还要再转换成十进制。


那么你应该明白二进制每一位权重都是2^N,此处N为位号,位号分布如下:

...3,2,1,0(小数点) -1,-2,-3...

权重分布如下:

...2^3,2^2,2^1,2^0 (.小数点)2^-1,2^-2,2^-3

例如一个二进制的1.111(B)=1.875(D)

整数部分:1的位号为0,因此1*2^0=1*1=1

小数点向右第一个1:位号为-1,因此1*2^-1=1*1/2=0.5

小数点向右第二个1:位号为-2,因此1*2^-2=1*1/4=0.25

小数点向右第三个1:位号为-3,因此1*2^-3=1*1/4=0.125

合起来1+0.5+0.25+0.125=1.875,其他位依此类推。

无需想得太多,你可以明显看到,二进制小数表达的数都是不同级别减半后的累加。与十进制的某些小数没有一一对应,显然转换必然会发生误差。


另一方面,存储时CPU会对十进制小数会进行编码,float的尾数长度为23位,阶码8位,符号占1位,共32位。double是64位,无论如何精度都是有限的,因此也会存在误差,1.1*100时编译器会将表达式先转换二进制并运算运算,运算后再编码存储到变量中或临时变量中,而运算是由CPU直接处理的,因此你可以看到有个0.000002的误差数,而printf是个函数,对误差进行了修正。

PS:简单了解下浮点数的编码方式网页链接

⑤ c语言浮点运算。错误原因

很奇怪,,,,,首先float型的用%d输出,,这个肯定是错的,,但为什么是的i的值也变了呢??
我做了下面的测试,,
int j=6;printf("x=%f,i=%d\n",x,i,j);
j的输出也有问题,,但
int j=6;printf("j=%d,x=%f,i=%d\n",j,x,i);j 的输出就没问题,,
于是结论就很明显了,,这是printf()的问题,,x是float型的,,用%d输出还有剩余,而余下的部分被分到了i上,,导致i的输出错误,,,

⑥ 用printf输出浮点型数据时出现错误

明白两点,问题就迎刃而解:

  1. int型和char型是兼容的,即int型可以用%c输出,输出是字符;反过来char型可以用%d输出,输出是十进制整数。

  2. 浮点数没有被定义为无符号型,所以用unsigned修饰float型后实质是将变量声明成了int型。

根据以上两点,解释如下:

图1在正确输出i(A)并回车后,把j的4个字节拿出一个最低字节按字符输出,由于65的浮点尾数低字节是0,是%c的不可显示字节,所以只输出了个回车。接着按char型取出j的第二个字节(还是0)输出,结果同上。

图2的j和k交换位置后,前两个兼容都输出字符A,到最后一个j时才遇到上面刚才分析过的情况。

图3由于j成了无符号整数,所以输出都正确。

供参考。建议不弄这种题,由于输出格式化控制字符串与变量类型不匹配,本身就是错误的,不同的编译器很可能做出不同的处理,所以结果也可能会不同……

⑦ C语言浮点数误差

这叫条件表达式。条件表达式中3个表达式类型允许不一样,计算时要向精度最高的那类型转换(语法规则),。(emum 是整型,低于float), 所以这里是 float 型.

⑧ c语言计算为什么结果不对

在double转换成int时,应当考虑到数值并不准确的问题,可以考虑自己要求的精度极限,比如是0.00000001,可以写成:printf("%d ",(int)(a/pow(10,b-1)+0.000000005); 这样可以配合取整实现在那位上的四舍五入。

⑨ c语言、 pow()函数、浮点数、程序一直报错,求大神指教。

<p>看不出代码有什么明显错误。从图片上的字符颜色看,你可能没有成功建立工程,所以编译器无法正确识别代码行。比如longdouble应该是蓝色的,而你这里全是黑色……我把你的代码重敲了一遍,运行没有你说的错误,证实了我的判断。计算是否正确没有验证。

⑩ c语言浮点数中的计算问题

浮点数的实现依赖于具体的环境,不同的环境可以有不同的实现特征。

devc的

我没有怎么学习浮点数的实现,只能经验地说这些了
;还有为方便调试,“%d”可以换成“%f”,那样编译器才知道你想要输出浮点数

阅读全文

与编译器浮点数计算错误相关的资料

热点内容
拉伸命令cad 浏览:489
yy安卓怎么抢麦 浏览:932
阿里云共享型服务器价格 浏览:442
压缩机效率低 浏览:54
python读取excel制作直方图 浏览:485
这周游源码 浏览:179
安卓手机图标怎么变成一样的 浏览:358
pythongui选择文件 浏览:481
预付APP哪个部门管理 浏览:612
程序员入门英语听力 浏览:128
服务器网站被大量不明地址访问 浏览:376
软件分享网站源码 浏览:611
rn是什么文件夹 浏览:988
钢筋核心区域加密 浏览:279
nginxphp慢 浏览:292
服务器系统如何写入u盘 浏览:12
cs社区服务器怎么改中文 浏览:25
360手机取消加密 浏览:964
python矩阵横向求和 浏览:637
台湾服务器主板厂商有哪些云主机 浏览:82