负面日志结果c

时间:2011-10-24 21:15:29

标签: c math

我需要在C中得到一个数字(在0和1之间)的自然对数。但是如果结果是负数,C中的自然对数函数会给出一个未定义的错误。

解决这个问题的方法是什么?

编辑:对不起伙计,我的代码已经翻转输入和输出,我无法发现它,感谢您的快速帮助,对不起我明显的愚蠢!

5 个答案:

答案 0 :(得分:5)

不,不。如果输入为负,则会出错(或者更确切地说,返回NaN)。标准库log函数适用于0和1之间的输入。

答案 1 :(得分:2)

对数对于负数没有真正的解决方案(在数学意义上使用real):负数的对数是一个复数值,不能用C double表示。因此标准库不会给出结果:您需要找到复杂的数学库或编写自己的复杂日志函数。

编辑:大多数读者都会注意到,我希望(我可能错误地!)认为OP意味着当输入为负时会发生错误,不是结果!

答案 2 :(得分:1)

您的意思是结果是否定的,还是输入log()应该毫不费力地返回否定结果。显示您的代码和输出。

如果您的意思是输入为负数,请在调用log()之前测试您的输入是否大于零。对零或负数的记录没有明智的答案。

答案 3 :(得分:1)

我怀疑你的意思是在编译程序时发生错误?然后确保添加

#include <math.h>

然后在编译时添加-lm。

答案 4 :(得分:0)

如何检测错误?

没有标准C库函数将errno设置为零,因此如果要检测错误,则必须执行以下操作:

errno = 0;
double d = log(0.25);
if (errno != 0)
    ...handle error...

如果未将errno设置为0,则可能会从以前的系统调用中获得任何剩余值。