C中的乘法问题

时间:2016-01-06 11:16:12

标签: c multiplication

我有这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



int main(){

char name[]="g9.59e10.01024";
int a = atoi(&name[1]);
int b = atoi(&name[3]);
int c = atoi(&name[6]);
int d = c-2;
int e = pow(10,d);
int f = (100*a+b);

printf("%d",a);
printf("\n");
printf("%d",b);
printf("\n");
printf("%d",c);
printf("\n");
printf("%d",d);
printf("\n");
printf("%d",e);
printf("\n");
printf("%d",f);
printf("\n");


float mass_gal = e*f;



printf("%f",mass_gal);
printf("\n");

}

当我运行它时,我得到了这个输出:

9,    59,    10,    8,    亿,    959,    1410719488.000000

所有数字似乎都是正确的,除了最后一个应该是95900000000.为什么我在那里输错了数字?

谢谢!

2 个答案:

答案 0 :(得分:4)

float mass_gal = e*f;中的乘法使用整数运算。结果大于INT_MAX并且溢出(导致未定义的行为)。然后将结果转换为并存储在浮点数中。

在执行乘法运算之前将运算符转换为float。

float mass_gal = (float)e * (float)f;

结果不准确,因为IEEE 754单精度浮点运算只能精确表示最大值为2 ^ 24的整数。

如果您不想担心精度,请使用可表示结果的整数类型,例如 long long int

答案 1 :(得分:0)

请您将类型从float更改为long并检查结果,似乎浮动大小的问题。