以下最小示例显示了该问题:
#include <math.h>
#include <iostream>
int main()
{
double a = log10(1/200);
double b = log10(0.005);
std::cout << "The value of a is " << a << " and b is " << b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我使用 g++ 编译程序:
g++ -o math math.cpp
./math
Run Code Online (Sandbox Code Playgroud)
程序的输出是:
The value of a is -inf and b is -2.30103
Run Code Online (Sandbox Code Playgroud)
C 也会发生同样的事情:
#include <math.h>
#include <stdio.h>
int main()
{
double a = log10(1/200);
double b = log10(0.005);
printf("The value of a is %f and b is %f\n", a, b);
}
Run Code Online (Sandbox Code Playgroud)
我使用 gcc 编译程序:
gcc -o math math.c -lm
./math
Run Code Online (Sandbox Code Playgroud)
输出再次是:
The value of a is -inf and b is -2.301030
Run Code Online (Sandbox Code Playgroud)
两种情况下的答案都应该是 -2.30103。有人可以向我解释发生了什么吗?
1/200正在执行整数除法,即 0,因此您正在执行的操作log10(0)为您提供-inf. 尝试将其更改为log10(1.0/200.0)(或其中只有一个需要小数)以告诉编译器进行浮点除法。