2009-10-09 4 views
0

Fortran PowerStation (버전 4.0)에서 Fortran 11 (2003) 컴파일러로 Fortran 코드를 이식합니다. 이전 컴파일러 (PowerStation)는 53 비트 정밀도를가집니다. 새로운 컴파일러로 포팅 할 때, real/float 변수에 대해 적절한 값이나 정확한 값을 얻지 못했습니다. 새로운 컴파일러가 64 비트 정밀도가되기를 바랍니다. 그래서 FPU (부동 소수점 단위)를 53 비트에서 64 비트 정밀도로 변경해야한다고 생각합니다. 이 올바른지? 그렇다면 새 컴파일러의 속성을 사용하여 53 비트에서 64 비트까지의 정밀도를 변경하는 방법은 무엇입니까? 그렇지 않다면 무엇을해야합니까? 사전에Fortran에서 53 비트에서 64 비트 FPU로 전환

감사합니다.

답변

1

새 컴파일러가 64 비트 정밀도로 바란다면 좋겠습니까? 나는 당신이 매뉴얼을 읽고 자신을 이해할 것으로 기대하지만, 그렇게 할 수 없다면, 어떤 컴파일러를 사용하고 있는지 누군가에게 도움을 줄 수 있는지 말해주십시오.

이전 코드의 결과와 새로운 컴파일러로 컴파일 된 코드의 결과는 어떻게 다릅니 까? 물론 정밀도가 변경되면 결과가 정확히 동일하지 않습니다. 동일성을 보장하기 위해 특별한 조치를 취하지 않으면 어떻게 될 수 있습니까?

2

Fortran 90/95/2003에서 부동 소수점 정밀도를 요청하는 이식성있는 방법은 selected_real_kind 내장 함수를 사용합니다. 예를 들어, integer, parameter :: DoubleReal_K = selected_real_kind (14)은 의 정수를 정의하며 소수점 이하 자릿수가 1235 이상인 부동 소수점 변수 인 real (DoubleReal_K) :: MyFloat을 지정합니다. 십진수 14 자리를 요청하면 일반적으로 53 비트의 배정도 부동 소수점이 생성되지만, 유일한 보장은 십진수 14 자리입니다.

더 많은 정밀도가 필요하면 더 긴 유형을 지정하려면 14보다 큰 값을 사용하십시오. 17 진수는 확장 정밀도 (64 비트)를 얻거나 컴파일러에 따라 4 중극 정밀도를 갖거나 아무것도 가져올 수 없습니다. 컴파일러가 더 큰 타입을 사용할 수 있다면, 그것을 제공 할 것입니다 ... 그렇지 않으면, 더 나은 컴파일러를 얻으십시오. 왜 그렇게 오래되고 지원되지 않는 컴파일러를 사용하고 있습니까? 또한 부동 소수점 계산에서 정확한 결과를 기대하지 마십시오. 변경 사항이 결과에 작은 변화를 일으키는 것은 정상입니다.

관련 문제