Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的乘法问题_C_Multiplication - Fatal编程技术网

C语言中的乘法问题

C语言中的乘法问题,c,multiplication,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

我有以下代码:

#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");

}
#包括
#包括
#包括
#包括
int main(){
字符名称[]=“g9.59e10.01024”;
int a=atoi(&name[1]);
intb=atoi(&name[3]);
int c=atoi(&name[6]);
int d=c-2;
int e=功率(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”);
浮子质量_gal=e*f;
printf(“%f”,质量单位);
printf(“\n”);
}
当我运行它时,我得到以下输出:

九,, 59, 10, 8. 100000000, 959, 1410719488.000000

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


谢谢大家!

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

在执行乘法之前,将运算符强制转换为浮点

float mass_gal = (float)e * (float)f;
由于IEEE 754单精度浮点算法只能精确表示最大值为2^24的整数,因此结果将不准确


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

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

在执行乘法之前,将运算符强制转换为浮点

float mass_gal = (float)e * (float)f;
由于IEEE 754单精度浮点算法只能精确表示最大值为2^24的整数,因此结果将不准确


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

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

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

如果我这样做,我会得到95900000256.000000,这很好,但最后的256是什么?因为即使使用浮点或双精度浮点,类型也有限制,并且只能处理类型支持的值。之所以会出现这种情况,是因为值95900000000不是由float类型处理的。在您的计算机上,最接近的值似乎是95900000256.000000我不知道这是如何编译的!pow是为双精度而非整数定义的。您应该关心数据类型。@mikedu95但是95900000256比我需要的数字大,为什么我不能得到它?或者我该如何解决这个问题?@Silviutz说浮点使用32位,即can代表4294967295个不同的值。但是实数是无限的,所有可能的值不能只用32位来表示。在您的计算机上,95900000000没有浮点表示,但最接近的值是95900000256.000000。如果我这样做,我得到95900000256.000000,这很好,但最后的256是什么?因为即使使用浮点或双精度,类型也有限制,您只能处理类型支持的值。之所以会出现这种情况,是因为值95900000000不是由float类型处理的。在您的计算机上,最接近的值似乎是95900000256.000000我不知道这是如何编译的!pow是为双精度而非整数定义的。您应该关心数据类型。@mikedu95但是95900000256比我需要的数字大,为什么我不能得到它?或者我该如何解决这个问题?@Silviutz说浮点使用32位,即can代表4294967295个不同的值。但是实数是无限的,所有可能的值不能只用32位来表示。在您的计算机上,95900000000没有浮点表示,但最接近的值为95900000256.000000。