2010-07-03 46 views

Trả lời

42

Trong Fortran> = 90, phương pháp tốt nhất là sử dụng các chức năng nội tại để xác định chính xác bạn cần - điều này đảm bảo cả tính di động và rằng bạn sẽ có được độ chính xác mà bạn cần. Ví dụ, để có được số nguyên i và my_int rằng sẽ hỗ trợ ít nhất 8 chữ số thập phân, bạn có thể sử dụng:

integer, parameter :: RegInt_K = selected_int_kind (8) 
integer (kind=RegInt_K) :: i, my_int 

Sau khi định nghĩa "RegInt_K" (hoặc bất kỳ tên nào bạn chọn) như một tham số, bạn có thể sử dụng nó trong suốt mã của bạn như một biểu tượng. Điều này cũng giúp dễ dàng thay đổi độ chính xác.

Yêu cầu 8 hoặc 9 chữ số thập phân thường sẽ có được số nguyên 4 byte.

số nguyên * 4 là một tiện ích mở rộng phổ biến quay trở lại FORTRAN cũ để chỉ định số nguyên 4 byte.

số nguyên (4) hoặc số nguyên (RegInt_K) là viết tắt của số nguyên (loại = 4) hoặc số nguyên (loại = RegInt_K). số nguyên (4) không giống như số nguyên * 4 và không di động - tiêu chuẩn ngôn ngữ không chỉ định giá trị số của các loại. Hầu hết các trình biên dịch sử dụng loại = 4 cho số nguyên 4 byte - cho các số nguyên * 4 và số nguyên (4) sẽ cung cấp cùng loại số nguyên - nhưng có ngoại lệ, vì vậy số nguyên (4) không thể di chuyển và tránh được tốt nhất .

Cách tiếp cận cho thực tế là tương tự.

CẬP NHẬT: nếu bạn không muốn chỉ định loại số theo độ chính xác được yêu cầu, mà thay vào đó là bộ nhớ mà chúng sẽ sử dụng, Fortran 2008 sẽ cung cấp phương thức. số thực và số nguyên có thể được xác định bởi số bit lưu trữ sau khi use ing module ISO_FORTRAN_ENV, ví dụ, đối với một 4-byte (32-bit) nguyên:

use ISO_FORTRAN_ENV 
integer (int32) :: MyInt 

Sổ tay gfortran có tài liệu dưới "nội tại mô-đun ".

+0

đó là một lời giải thích tuyệt vời! Kinh ngạc! Xuất sắc! nó rõ ràng với tôi bây giờ ..: D cảm ơn bạn rất nhiều! – Sam

19

Chỉ cần một giải thích rõ ràng hơn về loại đó. Trình biên dịch có một bảng các loại số khác nhau. Tất cả các loại số nguyên khác nhau là loại loại cơ bản - integer. Giả sử trình biên dịch có các loại 1 byte, 2 byte, 4 byte, 8 byte và 16 byte integer (hoặc real). Trong bảng trình biên dịch có một chỉ mục cho mỗi loại này - chỉ mục này là số loại.

Nhiều trình biên dịch chọn đánh số này:

kind number number of bytes 
1    1 
2    2 
4    4 
8    8 
16    16 

Nhưng họ có thể chọn bất kỳ số khác. Một trong những khả năng hiển nhiên là

kind number number of bytes 
1    1 
2    2 
3    4 
4    8 
5    16 

Có những trình biên dịch thực sự (ít nhất là g77 và NAG) chọn phương pháp này. Ngoài ra còn có các tùy chọn để thay đổi điều này.Do đó, kind số không được di chuyển integer(kind=4) hoặc integer(4) có nghĩa là số nguyên 4 byte hoặc số nguyên 8 byte tùy thuộc vào trình biên dịch.

integer*4 là di động theo nghĩa nó luôn có nghĩa là 4 byte. Nhưng mặt khác nó không phải là di động bởi vì nó chưa bao giờ là một phần của bất kỳ tiêu chuẩn nào. Các chương trình sử dụng ký pháp này không hợp lệ Fortran 77, 90 hoặc bất kỳ Fortran nào khác.

Để xem các tùy chọn phù hợp cách đặt số loại, hãy xem câu trả lời của M.S.B.

Khái niệm tương tự giữ cho real loại dữ liệu. Xem Fortran 90 kind parameter (câu trả lời của mataap).

+1

Điều thú vị ở đây, là các loại biểu mẫu (loại) và loại * không hoàn toàn có thể hoán đổi cho nhau và nó đòi hỏi sự chú ý. Ví dụ, trong số nguyên Intel Fortran (6) và số nguyên * 4 giống nhau, nhưng: COMPLEX ([KIND =] 4) giống với COMPLEX * 8, COMPLEX ([KIND =] 8) hoặc COMPLEX * 16 , COMPLEX ([KIND =] 16) hoặc COMPLEX * 32 – syscreat

+0

@syscreat Tôi đã không giải quyết thực và phức tạp trong câu trả lời này, bởi vì có một câu hỏi riêng biệt về chúng. Tôi đã giải quyết chỉ số nguyên ở đây. Xem liên kết tại và câu trả lời. Thực tế là thực tế và phức tạp của cùng một độ chính xác có cùng một số loại được buộc theo tiêu chuẩn. –

Các vấn đề liên quan