Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c中的负对数结果_C_Math - Fatal编程技术网

c中的负对数结果

c中的负对数结果,c,math,C,Math,我需要在C中获得一个数字(介于0和1之间)的自然对数。但是如果结果为负,C中的自然对数函数会给出一个未定义的错误 这是怎么回事 编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢 没有。如果输入为负数,它将给出一个错误(或者更确切地说,返回NaN)。标准库log函数对于0到1之间的输入非常有效。对数对于负数没有真正的解决方案(在数学意义上使用real):负数的对数是一个复数,不能用C双精度表示。因此,标准库不会给出这样的结果:您需要找到一个复

我需要在C中获得一个数字(介于0和1之间)的自然对数。但是如果结果为负,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)内的值提供错误,这将是非常奇怪的行为。未定义的错误?它是怎么给你的?是运行程序还是编译程序?显示您的代码?编辑:对不起,伙计们,我的代码翻转了输入和输出,我无法识别它,感谢您的快速帮助,对不起我的明显愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!编辑:对不起,伙计们,我的代码已经翻转了输入和输出,我无法发现它,谢谢你们的快速帮助,对不起我明显的愚蠢!