Fmod 没有按预期工作(c 编程)
Fmod does not work as expected(c programming)
(问题是我造成的,已经解决了,新手问候)我向大家道歉,我的函数类型是整数我刚刚意识到,我打开它因为我工作了几个小时,我必须删除它)。
我使用的是 gcc 9.3.0 版本和标准设置。在示例代码中,我在等待输出 7.14 时得到 7。这可能是什么原因?(我在编译时使用 gcc main.c -lm -o main,如果双精度数等于整数,我想做的是打印为整数,否则打印为双倍的,抱歉进行了调整,这是最后一个正确的版本)
#include <stdio.h>
#include <math.h>
int try(double a);
int main() {
double b = 7.14;
double x;
double temp;
x = try(b);
if (fmod(x, 1) == 0.0) { // print 7 in this function
temp = x;
printf("%d", (int)temp);
}
else if (fmod(x, 1) != 0.0) {
printf("%f", x);
}
return 0;
}
int try(double a) {
if (fmod(a, 1) != 0.0) {
printf("%lf", a); // print 7.14 in this function
} else if (fmod(a, 1) == 0.0) {
printf("%d", (int)a);
}
return a + 0;
}
fmod(7.14, 1) = 0.14
,因此它命中第一个 if
并打印 7.14
.
Compute remainder of division
Returns the floating-point remainder of numer/denom (rounded towards zero):
fmod = numer - tquot * denom
Where tquot is the truncated (i.e., rounded towards zero) result of: numer/denom.
使用 gcc 版本 10.2.0 (GCC)
得到结果 7.140000
一些代码格式和调试输出。
#include <math.h>
#include <stdio.h>
double func_try(double a) { return a + 0; }
int main() {
double b = 7.14;
double x;
x = func_try(b);
printf("%lf\n", fmod(x, 1));
if (fmod(x, 1) != 0.0) {
printf("%lf", x);
} else if (fmod(x, 1) == 0.0) {
printf("%d", (int)x);
}
return 0;
}
$gcc main.c -lm -o main
$./main
0.140000
7.140000
(问题是我造成的,已经解决了,新手问候)我向大家道歉,我的函数类型是整数我刚刚意识到,我打开它因为我工作了几个小时,我必须删除它)。 我使用的是 gcc 9.3.0 版本和标准设置。在示例代码中,我在等待输出 7.14 时得到 7。这可能是什么原因?(我在编译时使用 gcc main.c -lm -o main,如果双精度数等于整数,我想做的是打印为整数,否则打印为双倍的,抱歉进行了调整,这是最后一个正确的版本)
#include <stdio.h>
#include <math.h>
int try(double a);
int main() {
double b = 7.14;
double x;
double temp;
x = try(b);
if (fmod(x, 1) == 0.0) { // print 7 in this function
temp = x;
printf("%d", (int)temp);
}
else if (fmod(x, 1) != 0.0) {
printf("%f", x);
}
return 0;
}
int try(double a) {
if (fmod(a, 1) != 0.0) {
printf("%lf", a); // print 7.14 in this function
} else if (fmod(a, 1) == 0.0) {
printf("%d", (int)a);
}
return a + 0;
}
fmod(7.14, 1) = 0.14
,因此它命中第一个 if
并打印 7.14
.
Compute remainder of division
Returns the floating-point remainder of numer/denom (rounded towards zero):
fmod = numer - tquot * denom
Where tquot is the truncated (i.e., rounded towards zero) result of: numer/denom.
使用 gcc 版本 10.2.0 (GCC)
得到结果 7.140000
一些代码格式和调试输出。
#include <math.h>
#include <stdio.h>
double func_try(double a) { return a + 0; }
int main() {
double b = 7.14;
double x;
x = func_try(b);
printf("%lf\n", fmod(x, 1));
if (fmod(x, 1) != 0.0) {
printf("%lf", x);
} else if (fmod(x, 1) == 0.0) {
printf("%d", (int)x);
}
return 0;
}
$gcc main.c -lm -o main
$./main
0.140000
7.140000