문제
내가 하려고 작업으로 많(~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를 얻지는 못하지만 당신이 본 결과를 설명하는 데 도움이 될 수 있습니다.