xbns.net
当前位置:首页 >> 1.0/3*3 C语言的问题 >>

1.0/3*3 C语言的问题

这个问题是关于不同类型数据间混合运算的问题,由于1.0是浮点型,所以在计算时,“1.0,3”被转换为double型,即得到的结果是double型得到的结果是0.999999999999999,有 15位有效数字在输出时,用%f格式,只输出6位有效数字,所以结果输出1.000000

算式中有1.0,因此1.0/3*3的结果为实型.先运算1.0/3,再*3,结果为0.9输出时,按整型输出,因此输出结果为1.在这个问题上,计算机程序与数学计算是一致的.在数学上,0.9=1.这个是数学常识,而且是小学的数学常识.只能说你数学知识的欠缺从小学就开始了.

首先说一下,楼主要想达到预期的效果只需要把c=1/3*3 改为1.0/3*3至于原因,就是涉及到整型和浮点型变量在内存中有关存储位的知识了.简单点说,1/3这个操作被系统默认为两整型相除,得到的结果也是整型,所以1/3的值为0.333333333的整数部分,也就是0,后面0*3当然就是0了,而c是浮点型,所以显示的结果是0.00000了,希望对楼主有帮助.

1.0000000000000000000000000000000000000000000000000000000000000000000000000000000

对呀,确实是这样的 因为浮点数的精度是这个1.0是浮点数,精度是小数点后6位.所以1.0/3是0.333333,然后乘以3就是0.999999.这个题目考查的是大家对各种数据类型精度的理解

可以这么考虑!个人认为如此:a=(1.0/3)*3;1.0是浮点数,而3是整形数,所以对3进行隐式转换到浮点型,得出的结果与3的浮点型数相乘,得1.0.b=3/2;3和2都是整形,所以相除得1,余1,而得出的整形结果是1,放进浮点型的结果里,所以是1.0.c=(1/3)*3;1和3都是整形,所以相除得0,而0*3=0,所以结果是0.

这个问题我以前问过,不一定等于1的,大多编译器是这样算的:1.0/3=1.33333333333333333333;(它对超出精度部分舍去)0.333333333333333333333333*3=0.9999999999999999999999999; 于是就不等于1了 但我用过的有一个编译器就能让这个结果为1.00000000000000000000,貌似是对超出精度的部分四舍五入了

C中1.0为浮点型,但运行结果就是1我试过了

#include "stdio.h"main(){ float i; i=1.0/3.0*3; printf("%f",i);}在tc下是1.000000在VC++下也是同样的结果.最好自己验证一下.大家

不对!a,b,c,d 是int型a=1.0; --》a==1b=3; --》b==3c=a/b; --》c==0d=c*b; --》d==0printf("%f\n",1.0/3*3); -->输出大概是0.99999……后面的9是有限的,因为1/3==0.33333……3也是有限的

xyjl.net | | yydg.net | ysbm.net | sbsy.net | 网站首页 | 网站地图
All rights reserved Powered by www.xbns.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com