我需要在C中得到一个数字(在0和1之间)的自然对数。但是如果结果是负数,C中的自然对数函数会给出一个未定义的错误。
解决这个问题的方法是什么?
编辑:对不起伙计,我的代码已经翻转输入和输出,我无法发现它,感谢您的快速帮助,对不起我明显的愚蠢!答案 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,则可能会从以前的系统调用中获得任何剩余值。