Fortran 90 menghasilkan jawaban yang salah, menghasilkan 0 padahal seharusnya jawabannya 1. Apakah saya melewatkan sesuatu? [duplikat]

Berikut adalah kode Fortran 90 yang saya tulis. Ini adalah fungsi yang saya gunakan dalam kode yang lebih besar tetapi saya mendapatkan hasil yang salah.

Saya tahu secara matematis jawabannya harus 1 (atau mendekati 1 karena perhitungan) tetapi hasil jawaban saya adalah 0.

Apakah saya melakukan sesuatu yang salah? Apakah ada sesuatu yang saya tidak tahu?

Berikut adalah kode saya yang disimpan sebagai test.f90 yang saya kompilasi dan jalankan di windows gfortran:

program main
    implicit none

    real*8 :: y, t

    t = 0.0
    y = (1/3)*exp(5*t) + (2/3)*exp(-t) + t*t*exp(2*t)

    print*, 'y= ', y

end program main

person Oscar Alvarez    schedule 16.02.2020    source sumber
comment
Kerja bagus menghasilkan kode pengujian kecil yang dapat direproduksi. Selamat datang di JADI!   -  person Ross    schedule 17.02.2020


Jawaban (1)


fortran menganggap 1/3 dan 2/3 sama dengan nol. Anda harus menambahkan poin ke nomor Anda:

program main
implicit none

real*8 :: y, t

t = 0.0
y = (1./3.)*exp(5*t) + (2./3.)*exp(-t) + t*t*exp(2*t)

print*, 'y= ', y
person Valometrics.com    schedule 16.02.2020
comment
Jawaban ini benar-benar harus diperluas - mengapa 1/3 dan 2/3 sama dengan 0, dan mengapa desimal membantu? Juga, jelas ada duplikat untuk ditunjukkan... - person Ross; 17.02.2020
comment
Selain itu, 2./3. biasanya merupakan real presisi tunggal, yang berarti hasilnya tidak akurat jika dibandingkan dengan 2._dp/3._dp, dengan dp adalah jenis yang relevan. Menggunakan *8* tidak disarankan. - person Ross; 17.02.2020
comment
lihat artikel ini: math.hawaii.edu/~hile /fortran/fort3.htm#ganda - person Valometrics.com; 17.02.2020