R中的双曲正切在Windows中但在Mac中不存在?

R中的双曲正切在Windows中但在Mac中不存在?,r,windows,macos,hyperbolic-function,R,Windows,Macos,Hyperbolic Function,当使用R基函数tanh估计窗口中的双曲正切值时,对于较大(实部,虚部为0)值,该函数返回“NaN”: tanh(356 + 0i) > NaN + 0i 但是,在Mac中,相同的值返回1(与“真实”数学值一致应接近1): 问题1:有人知道为什么会发生这种情况吗? 额外信息 这似乎不是浮点问题,因为Mac的tanh对于任意大的值返回1: tanh(999999677873648767519238192348124812341234182374817239847812738481234871

当使用R基函数
tanh
估计窗口中的双曲正切值时,对于较大(实部,虚部为0)值,该函数返回“NaN”:

tanh(356 + 0i)
> NaN + 0i
但是,在Mac中,相同的值返回1(与“真实”数学值一致应接近1):

问题1:有人知道为什么会发生这种情况吗?

额外信息

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

tanh(999999677873648767519238192348124812341234182374817239847812738481234871823+0i)
> 1 + 0i
问题似乎与虚部有关,如:

tanh(356)
> 1
在Windows和Mac中。该问题似乎是系统(或处理器?)特有的,因为我们在以下方面进行了尝试:

  • 配备El Capitan v 10.11.6处理器的Mac:2.7 GHz Intel Core i5
  • 配备Sierra v 10.12.3处理器的Mac:3.2 GHz Intel Core i5
  • Windows 10 Home v 1607处理器:英特尔核心m3-SY30 CPU@0.90 GHz 1.51 GHz
  • Windows 7 Home Premium Service Pack 1处理器:英特尔Core i5-2410M CPU@2.30 GHz 2.30 GHz。
这些Windows机器抛出的是Mac的
1+0i

在所有情况下,我们都使用R版本3.3.3“最新”(64位)

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

更具体地说,根据R-devel for Windows的CRAN下载页面, R3.3.z系列使用GCC4.6.3(2012年3月)工具链,而即将推出(尚未发布!)的R3.4.z系列使用GCC4.9.3(2015年6月)工具链“R-devel”

**但是*我刚刚检查过(在我们的Windows server虚拟机上安装了CRAN的R-devel二进制文件),我发现问题仍然存在:在昨天的R-devel版本中,
tanh(500+0i)
仍然返回
NaN+0i

我现在认为更好的解决办法是使用R的内部替代品 (在R的
src/main/complex.c
中):我们有

我们应该使用它,正如我所看到的,实际上,在Windows上

R> -1i * tan((500+0i)*1i)
给予


正如它应该为tanh(500+0i)——但在Windows上没有。

有趣的是,在Windows 3.3.2上我得到了[1]“NaN+0i”。我也得到了
+0i
,我没有正确复制它。我现在编辑了这个术语。Ubuntu的行为似乎和MacBook一样。这看起来像一个glibc bug:修复了2012。我不知道如何在Windows上检查glibc版本。对于
r来说,这可能是一个很好的问题-devel@r-org
…接下来:我认为下一步将是编写一个简短的C程序,调用系统级复杂的tanh函数。如果它以与预期相同的方式失败,则确认问题出在Windows系统库上。但我不知道如何解决这个问题。
#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
R> -1i * tan((500+0i)*1i)
[1] 1+0i