C 中的乘法问题
Issue with multiplication in C
我有这个代码:
#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,
100000000,
959,
1410719488.000000
除了最后一个应该是 95900000000 之外,所有数字似乎都是正确的。为什么我在那里得到错误的数字?
谢谢!
float mass_gal = e*f;
行中的乘法使用整数运算。结果大于 INT_MAX 并且溢出(导致未定义的行为)。然后将结果转换并存储在一个浮点数中。
在执行乘法之前将运算符转换为浮点数。
float mass_gal = (float)e * (float)f;
结果将不准确,因为 IEEE 754 单精度浮点运算只能准确表示最大值为 2^24 的整数。
如果您不想担心精度,请使用可以表示结果的整数类型,例如 long long int.
能否请您将类型从 float 更改为 long 并检查结果,似乎是 float 大小的问题。
我有这个代码:
#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, 100000000, 959, 1410719488.000000
除了最后一个应该是 95900000000 之外,所有数字似乎都是正确的。为什么我在那里得到错误的数字?
谢谢!
float mass_gal = e*f;
行中的乘法使用整数运算。结果大于 INT_MAX 并且溢出(导致未定义的行为)。然后将结果转换并存储在一个浮点数中。
在执行乘法之前将运算符转换为浮点数。
float mass_gal = (float)e * (float)f;
结果将不准确,因为 IEEE 754 单精度浮点运算只能准确表示最大值为 2^24 的整数。
如果您不想担心精度,请使用可以表示结果的整数类型,例如 long long int.
能否请您将类型从 float 更改为 long 并检查结果,似乎是 float 大小的问题。