#include
#include
int main()
{
double m,p,d,r;
scanf("%lf%lf%lf",&p,&d,&r);
m=(log(p)-log(p-d*r))/log(1+r);
printf("%.2lf\n",m);
return 0;
}
log(x)中的x取值应该要 > 0的吧
(3000 - (300000 * 0.01)) == 0
输入的是p=3000,d=300000(100×3000),r=0.01.
log(p-d/r)就是log(0),从数学角度说这个值是不存在的,在log(x)x大于0且无限接近0时结果是无穷小。但是C语言的log函数中
可能没有设置对x的值进行检验(没有看过源码,这只是我的猜测),所以log(0)并不会报错,于是计算机会去计算这个值,虽然
在数学理论中这个值不存在,但是计算机会通过log函数中的步骤去计算出这个值,而这个值是不可预测的,很可能超出double
的表示范围,最终结果与计算机操作系统的位数和double的存储方式有关。
所以经过整个式子的计算后,m获得是一个不可预测的值,用lf输出后很可能是乱码。