2013-01-31 1 views
0

두 개 이상의 프로그래밍 언어를 사용하여 부동 소수점 숫자로 프로그램을 구현하려고합니다. 이 프로그램은 결국 오류를 매우 작은 값으로 가져 오기 위해 50k 반복을 말합니다.여러 프로그래밍 언어에서 비슷한 정밀도의 데이터 유형을 찾습니다.

내 결과가 비슷하도록 모든 언어에서 동일한 정밀도의 데이터 유형을 사용해야합니다. C/C++의 float/double과 D 및 Go의 부동 소수점 사이의 일치 여부를 알려주십시오. 나는 C/C++과 D가이 점에서 아주 가깝기는하지만 확실하지는 않을 것이라고 기대한다. 고마워.

+1

C와 C++는 C와 D보다 더 가깝습니다. –

+0

예, 저의 질문에 함축되어 있습니다. 나는 그것을 적절하게 수정했다. – user984260

답변

2

일반적으로, 컴파일 언어, 소수점 형식과 정밀도 부동 아래 두 가지로 제공 :

  1. 직접 하드웨어에서 지원하지 않는 부동 소수점 기능을 구현하는 데 사용되는 라이브러리.
  2. 시스템이 실행되고있는 하드웨어.

또한 컴파일러 옵션이 무엇인지 (그리고 컴파일러가 얼마나 정교한 지)에 따라 달라질 수 있습니다. 많은 최신 프로세서에는 벡터 명령어가 있으며 "정규"부동 소수점을 사용하는 경우와 약간 다를 수 있습니다 지침 (예 : x86 프로세서의 FPU 대 SSE). 계산이 완료되면 x86 FPU의 내부 계산이 80 비트이고 64 비트로 저장되기 때문에 때로는 차이점을 볼 수도 있습니다.

그러나 일반적으로 동일한 하드웨어 및 유사한 유형의 컴파일러를 사용하면 서로 다른 두 가지 언어에서 동일한 결과 (대략 동일한 성능)를 얻을 것으로 기대됩니다.

대부분의 언어는 "double"(일반적으로 64 비트) 또는 "single and double"(예 : float - 일반적으로 32 비트 및 double - 일반적으로 C/C++에서는 64 비트) 하지만 나는 D가 아닙니다.)

+0

Go는 "double"이 아니라 float32와 float64 만 있다고 생각합니다. 그래서 제가 Go (http://golang.org/pkg/math/)에 대해 궁금해하는 이유입니다. C/C++과 D에는 모두 double이 있습니다. – user984260

+4

float64 double double – Mehrdad

+2

D :'float' = IEEE 32 비트 FP,'double' = 64 비트,'real' = 하드웨어를 지원하는 가장 정확한 IEEE FP 유형. – BCS

2

Go에서는 부동 소수점 유형이 IEEE-754 표준을 따릅니다. 스트레이트 사양 (http://golang.org/ref/spec#Numeric_types)

float32  the set of all IEEE-754 32-bit floating-point numbers 
float64  the set of all IEEE-754 64-bit floating-point numbers 

에서

나는 D에 익숙하지 해요,하지만이 페이지는 관심의 대상이 될 수 있습니다 : http://dlang.org/float.html.

표준에서는 IEEE-754가 필요하지 않지만 C++에서는 is_iec559()을 사용하여 컴파일러에서 IEEE-754를 사용하는지 확인할 수 있습니다. 이 질문을보십시오 : How to check if C++ compiler uses IEEE 754 floating point standard

관련 문제