c中的负对数结果
我需要在C中获得一个数字(介于0和1之间)的自然对数。但是如果结果为负,C中的自然对数函数会给出一个未定义的错误 这是怎么回事c中的负对数结果,c,math,C,Math,我需要在C中获得一个数字(介于0和1之间)的自然对数。但是如果结果为负,C中的自然对数函数会给出一个未定义的错误 这是怎么回事 编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢 没有。如果输入为负数,它将给出一个错误(或者更确切地说,返回NaN)。标准库log函数对于0到1之间的输入非常有效。对数对于负数没有真正的解决方案(在数学意义上使用real):负数的对数是一个复数,不能用C双精度表示。因此,标准库不会给出这样的结果:您需要找到一个复
编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢 没有。如果输入为负数,它将给出一个错误(或者更确切地说,返回NaN)。标准库
log
函数对于0到1之间的输入非常有效。对数对于负数没有真正的解决方案(在数学意义上使用real
):负数的对数是一个复数,不能用C双精度表示。因此,标准库不会给出这样的结果:您需要找到一个复杂的数学库或编写自己的复杂日志函数
编辑:我希望大多数读者会注意到,我(可能是错误的!)假设OP意味着错误发生在输入为负时,而不是结果 你是说结果是负数还是输入log()
返回否定结果应该不会有问题。显示您的代码和输出
如果您的意思是输入为负,请在调用log()
之前测试您的输入是否大于零。对于零或负数的对数,没有合理的答案 我想你是说编译程序时出错了吧?然后确保您添加了
#include <math.h>
#包括
然后在编译时添加-lm。如何检测错误
没有一个标准C库函数将errno
设置为零,因此如果要检测错误,必须执行以下操作:
errno = 0;
double d = log(0.25);
if (errno != 0)
...handle error...
如果未将errno
设置为0,则可能会从以前的任何系统调用中获得任何剩余值。是否有显示问题的代码?能否显示示例代码?如果日志为范围(0,1)内的值提供错误,这将是非常奇怪的行为。未定义的错误?它是怎么给你的?是运行程序还是编译程序?显示您的代码?编辑:对不起,伙计们,我的代码翻转了输入和输出,我无法识别它,感谢您的快速帮助,对不起我的明显愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!