문제

내가 하려고 작업으로 많(~10^14),그리고 나는 할 수 있어야 저장하고 반복을 통해 루프의 길이,즉

n=SOME_BIG_NUMBER
do i=n,1,-1

나가려고 일반적인 스타 표기 kind=8 etc.하지만 아무것도 작동하는 것 같다.다음 확인 huge 고유 기능,그리고 코드:

program inttest

print *,huge(1)
print *,huge(2)
print *,huge(4)
print *,huge(8)
print *,huge(16)
print *,huge(32)

end program inttest

생산 숫자서 2,147,483,647 는 경우도 있습니다.왜 그렇습니까?내가 사용하여 추가(f95)에는 64 비트 기계입니다.

으면 내가 필요 bignum 라이브러리,하나는 사람들이 좋습니다?

도움이 되었습니까?

해결책

MAC에서 4.3, 4.4 및 4.5를 사용하는 GORTRRAN 버전은 8 바이트 정수를 지원합니다. FORTRAN>= 90에서 가변 유형을 선택하는 가장 좋은 방법은 필요한 정밀도를 지정하기 위해 Intrinsic 함수를 사용하는 것입니다. 시도해보십시오 :

integer, parameter :: LargeInt_K = selected_int_kind (18)
integer (kind=LargeInt_K) :: i, n
.

은 일반적으로 8 바이트 정수가 될 최소한 18 개의 십진수 자릿수를 얻습니다.

, GORTRRAN 4.3, 거대한 (1_LARGEINT_K) 출력 9223372036854775807. 기본적으로 거대한 (1) 등을 썼을 때 상수는 여기에 거대한 반환 된 2147483647이므로 정확하게 4 바이트이므로 지정해야합니다. 변수뿐만 아니라 변수가 아닌 상수의 정확성은 일반적 으로이 여행이 진짜 정확성에 중요한 수치를 잃을 때 사람들이 일정한 정확성을 잃습니다.

또한 fortran : 정수 * 4 vs 정수 (4) vs 정수 (종류= 4)

일반적으로 GORTRRAN에는 명령 이름 GORTRRAN이 있습니다. F95가 다른 컴파일러가 될 수 있습니까? "gfortran -v"와 "f95 -v"를 시도하십시오.

다른 팁

당신이 오해한 정확한 정의 HUGE 기능입니다. HUGE(num) 가장 큰 숫자를 반환합와 같은 종류 및 유형으로 num.반환된 값은 또한 같은 종류 및 유형으로 num.부터 귀하의 모든 입력 값을(기본)정수 HUGE, 에,정확하게 반환합니다 최대의 기본 크기의 정수입니다.

HUGE(num) 반환하지 않는 가장 큰 정수진 kind=num.도 HUGE(num) 반환이 가장 큰 숫자로 표현할 수 없 num 바이트입니다.는 동안 많은 컴파일러 사용 integer(kind=4)integer(kind=8) etc. 4-8 바이트 정수,이은 보장하지 않는 언어에 의해 표준 및 의존할 수 없습 것 휴대용입니다.

@MSB 의 대답하는 방법을 알려줍니다 당신이 무엇을 원하고,나는 그냥 간섭으로 일부는 설명을 합니다.

요약 : 컴파일러 옵션을보고 고려하십시오.

FORTRAN을 한 이후로 L-O-N-G 시간이었고, 나는 거대한 ()을 사용하여 기억하지 못하지만, 나는 이것을 조금 보았습니다. 내 Intel Linux 기계에는 GORTRRAN 4.1.2가 있습니다. -fdefault-integer-8 옵션을 사용하여 컴파일해야했습니다. 64 비트 정수에 대해 작동합니다. 특히이 코드로 :

      program inttest
      print *, huge(1)
      end program inttest
.

실행

$ gorttran inttt.for

인쇄 할 실행 파일 :

2147483647

그러나 실행 중 :

$ gfterran -fdefault-integer-8 inttttt.forfor

은 출력을 부여한 실행 파일을 가져 왔습니다.

9223372036854775807

또한 변수를 정수 * 8로 선언하고 -fdefault-integer-8 옵션없이 컴파일하면 오류가 발생했습니다. 코드 :

  program inttest2
  integer*8  test_int
  test_int = 9223372036854775807
  print *, test_int
  end program inttest2
.

실행

$ gorttran inttest2.for

로 됨

파일 intttttt.for : 4

  test_int = 9223372036854775807  
                               1 
.

오류 : (1)

에 종류가 너무 큰 정수

그러나 -fdefault-integer-8 옵션으로 컴파일되면 일이 잘 작동했고 인쇄 할 수있는 실행 파일이

9223372036854775807

유용 할 다른 GORTRRAN 옵션이 있지만 더 조사하지 않았습니다.

부여 된이게 여전히 10 ^ 14를 얻지는 못하지만 당신이 본 결과를 설명하는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top