"1-1/2+1/3-1/4+……+1/99-1/100求值,想问这里的double为啥不能换成float?int main(int argc, char *argv[]){ double s=0; int i; for(i=1;i
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 23:33:21
![](/uploads/image/z/13977403-43-3.jpg?t=%221-1%2F2%2B1%2F3-1%2F4%2B%E2%80%A6%E2%80%A6%2B1%2F99-1%2F100%E6%B1%82%E5%80%BC%2C%E6%83%B3%E9%97%AE%E8%BF%99%E9%87%8C%E7%9A%84double%E4%B8%BA%E5%95%A5%E4%B8%8D%E8%83%BD%E6%8D%A2%E6%88%90float%3Fint+main%28int+argc%2C+char+%2Aargv%5B%5D%29%7B++++double+s%3D0%3B++++int+i%3B++++for%28i%3D1%3Bi)
"1-1/2+1/3-1/4+……+1/99-1/100求值,想问这里的double为啥不能换成float?int main(int argc, char *argv[]){ double s=0; int i; for(i=1;i
"1-1/2+1/3-1/4+……+1/99-1/100求值,想问这里的double为啥不能换成float?
int main(int argc, char *argv[])
{
double s=0;
int i;
for(i=1;i
"1-1/2+1/3-1/4+……+1/99-1/100求值,想问这里的double为啥不能换成float?int main(int argc, char *argv[]){ double s=0; int i; for(i=1;i
误差在计算中的累积的问题.
float单精度浮点,double双精度浮点.
例如,自然数学中我们都知道1/6=0.1666666.是无穷小数,但是计算机中无法表示无穷小数,只能按一定精度截断.假设(仅仅是假设,只是为了说明问题,实际计算机中可能精度更高)
float 取0.167,double取0.1667,double的截断误差小于float.由于你的算法采用的迭代的方法,误差每一次都在累积.因此会出现float误差很大,double相对较小的现象.
况且,你的算式中不仅只有1/6,还有1/7,1/11.等很多无穷小数截断后的误差在累积.
因此,使用double比float好!
如果位数没超的话用float也可以,只不过大家习惯上整数用int小数用double,不用考虑太多位数上的问题,多分配点空间是可以接受的。