math.h 工作方式不同?
math.h methods working different?
我已经在c上尝试了一些计算,我的代码如下
#include <stdio.h>
#include <math.h>
int main(void)
{
float a = 1.8;
float b = 3.3;
float c = 1.5;
float d = 5.9;
float e = 2.6;
float result = a / (a + (abs(a - b) / (b + (pow(c, 5) / (e + (pow(d, 2) / (b + (pow(c, 3) / 4))))))));
float result2 = a / (a + ((-1) * (a-b)) / (b + ((c * c * c * c * c) / (e + ((d * d) / (b + ((c * c * c) / 4)))))));
printf("Result = %.4f\n", result);
printf("Result2 = %.4f\n", result2);
system("pause");
return(0);
}
Result2 是正确的结果。那么为什么 result 和 result2 不同呢?我在这里做错了什么?
abs
用于 int
:
int abs(int j);
而 fabs
或 fabsf
是您应该使用的:
double fabs(double x);
float fabsf(float x);
已编辑:
将abs
更改为fabs
后,本地测试给出:
[pengyu@GLaDOS tmp]$ gcc a.c -lm -Wall -pedantic
[pengyu@GLaDOS tmp]$ ./a.out
Result = 0.8272
Result2 = 0.8272
我已经在c上尝试了一些计算,我的代码如下
#include <stdio.h>
#include <math.h>
int main(void)
{
float a = 1.8;
float b = 3.3;
float c = 1.5;
float d = 5.9;
float e = 2.6;
float result = a / (a + (abs(a - b) / (b + (pow(c, 5) / (e + (pow(d, 2) / (b + (pow(c, 3) / 4))))))));
float result2 = a / (a + ((-1) * (a-b)) / (b + ((c * c * c * c * c) / (e + ((d * d) / (b + ((c * c * c) / 4)))))));
printf("Result = %.4f\n", result);
printf("Result2 = %.4f\n", result2);
system("pause");
return(0);
}
Result2 是正确的结果。那么为什么 result 和 result2 不同呢?我在这里做错了什么?
abs
用于 int
:
int abs(int j);
而 fabs
或 fabsf
是您应该使用的:
double fabs(double x);
float fabsf(float x);
已编辑:
将abs
更改为fabs
后,本地测试给出:
[pengyu@GLaDOS tmp]$ gcc a.c -lm -Wall -pedantic
[pengyu@GLaDOS tmp]$ ./a.out
Result = 0.8272
Result2 = 0.8272