【发布时间】:2017-03-03 01:41:10
【问题描述】:
#include<stdio.h>
#include<math.h>
#define PI 2*acos(0.0)
int main(void)
{
double theta;
theta=tanh(1/(sqrt(3.0)));
printf("With tanh function = %lf\n",theta);
printf("Actual value = %lf\n",PI/6.0);
return 0;
}
输出:
使用 tanh 函数 = 0.520737
实际值 = 0.523599
为什么这两个值不同?应该和我的理解一样。
【问题讨论】:
-
@LưuVĩnhPhúc 注意在这种情况下,它应该评估为相同的结果
-
@immibis 是的,我知道。这只是一种应该熟悉的行为
-
浮点数的不准确性和宏上缺少的括号都不是问题所在。我在 HP42S 仿真器上计算了 tanh(1/sqrt(3.0)),得到了 0.520736883716。您确定预期结果是 pi/6 吗?
-
根据 wolfram (functions.wolfram.com/ElementaryFunctions/Tanh/03/02) tanh(πi/6) 是 i/sqrt(3)。这里
i是虚数单位(即-1 的平方根)。您不能只将is 分开,而且无论如何您似乎正在反转tanh 和atanh。我认为您可以从身份 e^iπ=-1 中推断出身份