当使用R基函数tanh(356 + 0i)
> NaN + 0i
估算Windows中的双曲正切(对于大的(实部,有0个虚部)值时,该函数返回' NaN':
tanh(356 + 0i)
> 1 + 0i
然而,在Mac中,相同的值返回1(与"实数"数学值一致应该接近1):
tanh
问题1:有没有人知道为什么会发生这种情况?
额外信息
这似乎不是一个浮点问题,因为Mac tanh(999999677873648767519238192348124812341234182374817239847812738481234871823+0i)
> 1 + 0i
似乎为任意大的值返回1:
tanh(356)
> 1
问题似乎与想象部分有关:
NaN
在Windows和Mac中都是。问题似乎是系统(或处理器?) - 具体,因为我们已经尝试过:
这些Windows计算机抛出1 + 0i
,即Mac .then()
。
在所有情况下,我们使用R版本3.3.3"最新" (64位)。
答案 0 :(得分:4)
更具体地说,根据R-devel for Windows https://cran.r-project.org/bin/windows/base/rdevel.html的CRAN下载页面, R 3.3.z系列使用gcc 4。6。3(2012年3月)工具链,而#34; R-devel",即将发布的(尚未发布!)R 3.4.z系列使用gcc 4.9.3( 2015年6月)工具链。
**但是*我刚刚检查过(在我们的Windows服务器虚拟机上安装了CRAN的R-devel二进制文件),我发现问题依旧存在:在昨天的R版本中-devel,tanh(500+0i)
仍会返回NaN+0i
。
我现在认为更好的解决方案是使用R的内部替代品
(在R' src/main/complex.c
中):我们有
#ifndef HAVE_CTANH
#define ctanh R_ctanh
static double complex ctanh(double complex z)
{
return -I * ctan(z * I); /* A&S 4.5.9 */
}
#endif
我们应该使用它,正如我在Windows上看到的那样,
R> -1i * tan((500+0i)*1i)
给出
[1] 1+0i
应该{{1}} ---但不在Windows上。