float的有效数字到底是6位还是7位?解决思路
float的有效数字到底是6位还是7位?
下面的一段程序:
# include "stdio.h"
void main()
{
float m;
m=2.5+7%3*(int)(2.5+4.7)%2/4;
printf("m=%f",m);
printf("end!"); //在此行设置一个断点
}
调试运行后,停在断点处,然后奇怪的问题就处理了:
在控制台窗口打印出来是m=2.500000(七位有效数字),但是,用debug的变量查看窗口却显示m是2.50000(六位有效数字),不知道是怎么回事?
请高手指教!
------解决方案--------------------
控制台窗口打印出来是m=2.500000(七位有效数字),但是,用debug的变量查看窗口却显示m是2.50000(六位有效数字),
你编程的目的肯定是想正确输出吧, 那只要输出正确就行了管debug干吗?
何况 debug还能按HEX 方式显示呢.说不准的
换个方式测试吧比如使用 pi ,看看能准确输出到第几位.
其实没必要这么讲究,如果精度要求高就用 double,如果还不够高 就用 long double
灵活点吗!
------解决方案--------------------
前面有人说了尾数23,2^23=8388608,所以有效数字是七位,但是只能保证6位,因为7位表示不了全部。C++ primer也是这样说的,float只能保证6位有效数字,double保证10位(第四版P32)。
下面的一段程序:
# include "stdio.h"
void main()
{
float m;
m=2.5+7%3*(int)(2.5+4.7)%2/4;
printf("m=%f",m);
printf("end!"); //在此行设置一个断点
}
调试运行后,停在断点处,然后奇怪的问题就处理了:
在控制台窗口打印出来是m=2.500000(七位有效数字),但是,用debug的变量查看窗口却显示m是2.50000(六位有效数字),不知道是怎么回事?
请高手指教!
------解决方案--------------------
控制台窗口打印出来是m=2.500000(七位有效数字),但是,用debug的变量查看窗口却显示m是2.50000(六位有效数字),
你编程的目的肯定是想正确输出吧, 那只要输出正确就行了管debug干吗?
何况 debug还能按HEX 方式显示呢.说不准的
换个方式测试吧比如使用 pi ,看看能准确输出到第几位.
其实没必要这么讲究,如果精度要求高就用 double,如果还不够高 就用 long double
灵活点吗!
------解决方案--------------------
前面有人说了尾数23,2^23=8388608,所以有效数字是七位,但是只能保证6位,因为7位表示不了全部。C++ primer也是这样说的,float只能保证6位有效数字,double保证10位(第四版P32)。