S1E7最后那个算5次方的编程题
#include <stdio.h>#include <math.h>
int main (void)
{
int i;
double r;
printf ("请输入一个数字:");
scanf ("%i", &i);
r = pow(i, 5);
printf ("%d的五次方是%f\n", i, r);
return 0;
}
把 r 定义成long long为什么得不出正确的值? 因为pow函数默认返回的是double类型,你用long long类型的变量去接收,可能因为强制类型转换而丢失精度 BngThea 发表于 2017-11-25 21:10
因为pow函数默认返回的是double类型,你用long long类型的变量去接收,可能因为强制类型转换而丢失精度
#include <stdio.h>
#include <math.h>
int main (void)
{
int i;
unsigned long long int sum = 0, weight, temp;
for (i = 0; i < 64; i++)
{
temp = pow(2, i);
sum = sum + temp;
}
weight = sum / 25000;
printf ("%llu麦子\n", sum);
printf ("%lluKg\n", weight);
return 0;
}
这里面也用到了pow函数,返回值就是long long啊。
这个就能得出正确答案 ilsoviet1917 发表于 2017-11-25 21:17
这里面也用到了pow函数,返回值就是long long啊。
这个就能得出正确答案
一般来说是不会有问题,但是将double强制转换为其他类型始终存在风险,这里涉及到不同类型在内存中的存放方式,编码格式,数据分布等内容,详细你可以百度一下IEEE浮点标准 BngThea 发表于 2017-11-25 21:34
一般来说是不会有问题,但是将double强制转换为其他类型始终存在风险,这里涉及到不同类型在内存中的存放 ...
17行换成%lld就好
页:
[1]