#include<stdio.h>
void main()
{
float a=78.88;
printf("%f\n",a);
}
输出结果却是78.879997
表示很无语,为什么。
我试过78.77错误,78.777正确,78.99错误 仿佛只要小数点后前两位一样就出错,但是78.8899正确 输入78.80 78.82 也正确,但是输入78.81就错误 输入78.8840也正确
还有,您的解释看明白了,问下,在内存中的二进制显示如何才能用调试模式看出来?还有,书上写的是float精度是六位,这样岂不是不是六位了
希望高手帮忙解决下上述两条问题。多谢
你可以自己写段代码,把float保存的内存片段按bit打印出来。
请问什么是截断误差,精度既然是六位,为什么只有3位准确?以及,怎样让输出的结果变为准确值?
追答十进制化二进制化不尽,(类似无限循环小数),float 数只有 二进制 32 位存放空间,存不下的部分就丢失了。这叫“截断”(尾巴没了)。精度六位,指 数的期望值与数的近似值的误差 在最右边,依次数去是第7位截断。而不是要写出6个一模一样的数来。
这里 误差 fabs( 78.88 - 78.8799) = 0.0001 ,当然,你可以用%.10f 显示更多位。
变为“准确值”:用 math,h 里的函数,例如 地板,天花板 (看你需要)或自编4舍5入程序。。
再要准确,你用 字符串存放。
c语言中float输出的结果从左往右有效数字是6位,但是我编写这个小程序后...
所以你在输出是按小数点后六位输出为78.879997
float浮点数有效数字只有6位,为什么不是7位?
float f = 123456.789 printf("%.2f",f);因为要求输出结果保留两位,所以输出结果小数点后会有两位,但是!这两位小数保留的毫无意义,因为它不可靠,可靠的6位有效数字已经被整数部分的123456占完了。根据以上,楼主可以自行给 f 赋各种不同值,多次调整整数部分与小数部分的位数和大小,查看输出,相...
C语言中关于float类型变量输出是的问题
记不太清楚啦。好像意思是说浮点可以精确7个有效数字。而且小位数默认为6位小数。你整数部分肯定不会出错的。但是只有7个有效数字。所以后面的其他小数点会出错。各个电脑出错的值会有点不太相同。
C语言中浮点数float和double输出的问题
精度是说某种类型的浮点数在C中计算时有多少位是有效的,这实际上是包括整数部分的,但不包括小数点那一位;而输出小数点后多少位是由输出函数printf中的控制字符串确定的。float的精度是6到7位,就是说连整数部分有6位是可信的,再长了就是机器垃圾值了;double有16到17位是可信的,再多了也是机...
c语言中的float数据类型的有效数字为什么是6~7位
float数据 机器内是2进制数,1位符号位 8位指数位 23位“尾数”位 共32 位 2进制数。平时讲 有效数字 是6~7位 ,指10进制。通常程序输入的数是10进制,进入机器后要化成2进制,计算完又转十进制输出。10进制到2进制,2进制到10进制 转换,有的数化不净,有的数化得净。如同10进制分数化10...
VC中float和double 型的数字位数是怎么规定弄呢?有效数字是6或7位?为 ...
x=123456789.0时,10位有效数字,同样也只能接收7位有效数字,那么89.0也是无效的,也是不准确地表示该数。如果你想电脑准确地表示该数应该用double类型就可以了。我再来给你讲一下为什么总是在小数点后有6位。原因是这样的:浮点型数据在内存中是按照指数形式存储的。系统把一个浮点型数据分成小数部分...
C语言的double与float类型最多只能默认输出小数位数都取6位?
float 为单精度,有效数字为6~7double 为双精度,有效数字为15~16 但他们在输出时,小数点后都有6位小数。例如3.123456 但是在格式化输出时例外。如:main(){ int a=15;float b=123.1234567;double c=12345678.1234567;char d='p';printf("a=%d,%5d,%o,%x\\n",a,a,a,a);printf("b=...
C语言 有关double型取值范围的问题
3.f格式符用来输出实数,以小数形式输出,因为你没有指定字段宽度,所以按系统自动指定,使整数部分全部如数输出,并输出6位小数。应当注意,并不是输出的都是有效数字,的精度的有效数字是7位有效数字,双精度是15位有效数字,只输出6位小数。这就是你输出小数总是6位的原因。你说的总是精确到小数后6位是不对的,...
C语言里 float 型的输出后是不小数点后必须的保留六位啊?谢谢啦~~
不是,默认是6位 printf("%.3f",d);.后面的3就是保留3位,你可以根据需要改动
C语言float a=1234.444输出为什么是a=1234.443970
你好,是这样子的。C中只保证6位有效数字,也就是只有1234.44保证是正确的,后面还有四位小数,是因为系统中默认float输出6位小数。后面的小数是3970这就涉及到内存和运算的问题,计算机只是以一个很接近的数字表示这个数的,而不是完全相等。