R 中的双曲正切在 Windows 中抛出 NAN 但在 Mac 中不抛出 NAN?

Hyperbolic Tangent in R throws NAN in Windows but not in Mac?

当使用 R 基函数 tanh 估计 Windows 中的双曲正切值时,函数 returns 'NaN' 为大值(实数,虚部为 0):

tanh(356 + 0i)
> NaN + 0i

但是在Mac中同样取值returns1(恰好"real"的数学值应该接近1):

tanh(356 + 0i)
> 1 + 0i

Question 1: Does anybody have a clue on why is this happening?

额外信息

这似乎不是浮点数问题,因为似乎 Mac 的 tanh returns 1 对于任意大的值:

tanh(999999677873648767519238192348124812341234182374817239847812738481234871823+0i)
> 1 + 0i

问题似乎与虚部有关:

tanh(356)
> 1

在 Windows 和 Mac 中。这个问题似乎是系统(或处理器?)特定的,因为我们已经尝试过:

这些 Windows 机器抛出 NaN,Mac 的 1 + 0i。 在所有情况下,我们都使用 R 版本 3.3.3 "newest"(64 位)。

@Ben Bolker 就在现场。 Windows 使用了一些旧的 C 库,这里是 glibc 的 "mathlib" 部分。

更具体地说,根据 Windows https://cran.r-project.org/bin/windows/base/rdevel.html 的 R-devel 的 CRAN 下载页面, R 3.3.z 系列使用 gcc 4.6.3(2012 年 3 月)工具链,而 "R-devel",即将发布(尚未发布!)R 3.4.z 系列使用 gcc 4.9 .3(2015 年 6 月)工具链。

**但是*我刚刚检查过(在我们的 Windows 服务器虚拟机上安装了来自 CRAN 的 R-devel 二进制文件),我发现问题仍然存在:在昨天的 R 版本中-开发,tanh(500+0i) 仍然 returns 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

对于 tanh(500+0i) 应该如此 --- 但在 Windows.

上则不然