2017-03-17 7 views
3

는 : 맥에서R에서 쌍곡선 탄젠트가 Windows에서 NAN을 던지지 만 Mac에서 NAN을 던지지 않습니까? (0 허수 부분으로, 실제) 큰 대한 R 기본 기능 <code>tanh</code>를 사용하여 윈도우에서 쌍곡 탄젠트를 추정 함수 복귀 'NaN이'를 값 때

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

그러나 동일한 값이 반환 1 ("진짜"수학적 값과 일치하는 것은 1)에 근접해야합니다 :

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

질문 1 : 사람이 일어나는 이유에 대한 단서가 있습니까?

추가 정보를 원하시면

이 보인다되지 부동 소수점 문제는 맥의 tanh 반환 임의의 큰 값 (1)가 있다는 것 때문에 :

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

문제는과 관련이있는 것으로 보인다 허수 부 :

tanh(356) 
> 1 

은 Windows와 Mac에서 모두 사용할 수 있습니다. 이 문제는 시스템이 될 것 같다 - 특정 우리는 그것을 시도로 (또는 프로세서?) :

  • 맥 엘과 캐피 V 10.11.6 프로세서 : 2.7 GHz의 인텔 코어 i5
  • 맥 시에라이 v 10.12.3 프로세서 : 3.2 GHz의 인텔 코어 i5
  • 윈도우 10 홈 V 1607 프로세서 : 인텔 코어 인텔 코어 m3-SY30의 CPU GHz의 1.51 GHz의
  • 윈도우 7 홈 프리미엄 서비스 팩 1 프로세서 0.90 @ i5-2410M CPU @ 2.30GHz 2.30GHz.

이 윈도우 머신이 NaN을 던져, 맥의 1 + 0i. 모든 경우에 우리는 R 버전 3.3.3을 "최신"(64 비트)으로 사용하고 있습니다.

+1

재미있는 Windows v 3.3.2 [1] "NaN + 0i"가 표시됩니다. – thc

+0

나는'+0i'를 제대로 가져 오지 못했다. 올바르게 복사하지 않았다. 나는 지금 용어를 편집했다. –

+0

우분투는 Mac과 동일한 동작을 보이는 것 같습니다 – OganM

답변

4

@Ben Bolker가 바로 자리에 있습니다. Windows는 다소 오래된 C 라이브러리를 사용합니다. 여기서는 glibc의 "mathlib"부분입니다.

보다 구체적으로, "R-(STABLE)"반면 윈도우 https://cran.r-project.org/bin/windows/base/rdevel.html의 R의 3.3.z 시리즈는 GCC 4.6.3를 사용 (2012 월) 툴체인을위한 R-(STABLE)에 대한 크랑 다운로드 페이지, 다가오는에 따라 (아직 출시되지 않았습니다!) 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 

을 제공합니다 tanh(500+0i)을 사용해야하지만 --- Windows에서는 그렇지 않습니다.