プログラミング/Fortran
表示
< プログラミング
Fortranの歴史と特徴
[編集]Fortran(Formula Translation)は、1957年にIBMによって開発された世界最初の高水準プログラミング言語です。科学技術計算、数値解析、シミュレーション、工学分野で今なお重要な役割を果たしています。数値計算の効率性と数学的表現の直感性を特徴とする言語として知られています。
基本的な文法と構造
[編集]プログラムの基本構造
[編集]現代のFortran(Fortran 90以降)では、モジュラーでクリーンなプログラム構造が可能になりました:
program scientific_calculation implicit none real :: x, result real, parameter :: PI = 3.14159265359 x = 42.0 result = calculate_area(x) print *, "円の面積: ", result contains function calculate_area(radius) result(area) real, intent(in) :: radius real :: area area = PI * radius * radius end function calculate_area end program scientific_calculation
重要な特徴:
implicit none
: 暗黙の型宣言を無効にし、変数を明示的に宣言するよう強制intent(in)
: 引数が関数内で変更されないことを明示contains
: サブプログラムを本体プログラム内に定義可能
データ型
[編集]Fortranは科学計算に適した豊富な数値型を提供します:
program data_types_demo implicit none integer :: whole_number real :: decimal_number complex :: complex_value double precision :: high_precision_number logical :: truth_value whole_number = 42 decimal_number = 3.14159 complex_value = (1.0, 2.0) high_precision_number = 3.141592653589793d0 truth_value = .true. print *, "整数: ", whole_number print *, "実数: ", decimal_number print *, "複素数: ", complex_value end program data_types_demo
配列操作
[編集]Fortranの配列操作は非常に強力で直感的です:
program array_operations implicit none real, dimension(5) :: vector real, dimension(3, 3) :: matrix integer :: i, j ! ベクトルの初期化 vector = [1.0, 2.0, 3.0, 4.0, 5.0] ! 行列の初期化 matrix = reshape([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], [3, 3]) ! 配列の全要素に対する操作 vector = vector * 2.0 matrix = matrix ** 2 print *, "変更後のベクトル:" print *, vector print *, "変更後の行列:" do i = 1, 3 print *, (matrix(i, j), j = 1, 3) end do end program array_operations
数値計算と並列処理
[編集]Fortranは科学計算における並列処理をネイティブにサポートします:
program parallel_computation use, intrinsic :: iso_fortran_env, only: real64 implicit none integer, parameter :: n = 1000000 real(real64), allocatable :: large_array(:) real(real64) :: sum_result integer :: i allocate(large_array(n)) ! 配列の初期化 !$omp parallel do do i = 1, n large_array(i) = sin(real(i, real64)) end do !$omp end parallel do ! 並列リダクション !$omp parallel do reduction(+:sum_result) do i = 1, n sum_result = sum_result + large_array(i) end do !$omp end parallel do print *, "配列の合計: ", sum_result deallocate(large_array) end program parallel_computation
モジュールとカプセル化
[編集]Fortranのモジュールは、関連する手続きとデータをカプセル化するための強力な機能です:
module physics_constants implicit none real, parameter :: GRAVITATIONAL_CONSTANT = 6.67430e-11 real, parameter :: SPEED_OF_LIGHT = 299792458.0 end module physics_constants module orbital_mechanics use physics_constants implicit none contains function calculate_orbital_period(semi_major_axis, central_mass) result(period) real, intent(in) :: semi_major_axis, central_mass real :: period period = 2 * 3.14159 * sqrt((semi_major_axis**3) / (GRAVITATIONAL_CONSTANT * central_mass)) end function calculate_orbital_period end module orbital_mechanics program space_simulation use orbital_mechanics implicit none real :: earth_period earth_period = calculate_orbital_period(1.496e11, 1.989e30) print *, "地球の公転周期: ", earth_period, "秒" end program space_simulation
おわりに
[編集]Fortranは、その長い歴史にもかかわらず、科学技術計算の分野で今なお重要な役割を果たしています。高性能な数値計算、直感的な配列操作、並列処理のサポートなど、特定の分野において他の言語を凌駕する能力を持っています。
最新の標準(Fortran 2018)では、オブジェクト指向プログラミングのサポートや、より洗練された並列処理機能が追加されており、現代のコンピューティング環境にも十分対応しています。
科学者、数値解析者、エンジニアにとって、Fortranは今でも最も強力なツールの一つなのです。