Beginner fortraner: messing up arithmatic

  • Context: Fortran 
  • Thread starter Thread starter Moly
  • Start date Start date
  • Tags Tags
    Beginner
Click For Summary
SUMMARY

The discussion centers on a user's transition from MATLAB to Fortran, specifically addressing arithmetic issues encountered in the Fortran code. The user initially defined Nstep and Xstep as integers, leading to truncation errors in calculations. By changing these variables to double precision, the user resolved the discrepancies, achieving correct results for Nstep and dx. The key takeaway is the importance of data types in Fortran, particularly when performing arithmetic operations that require floating-point precision.

PREREQUISITES
  • Understanding of Fortran programming language syntax and structure
  • Familiarity with data types in Fortran, specifically integer and double precision
  • Basic knowledge of arithmetic operations and their implications in programming
  • Experience with MATLAB for comparative analysis of programming results
NEXT STEPS
  • Learn about Fortran data type conversions and their impact on arithmetic operations
  • Explore the use of implicit and explicit typing in Fortran programming
  • Investigate floating-point arithmetic and precision issues in numerical computing
  • Study best practices for transitioning code from MATLAB to Fortran
USEFUL FOR

Programmers transitioning from MATLAB to Fortran, computational scientists, and anyone interested in understanding data type implications in numerical programming.

Moly
Messages
20
Reaction score
0
Hi All.
I am trying to rewrite a program that i have in MATLAB to one in fortran. as i chug along, i am comparing the results and i am getting funny answers. This is the program in have in fortran so far:

ccccccccccccccccccccccccccccccccccccccccccccccccc
program main
implicit none
ccccccccccccccccccccccccccccccccccccccccccccccccc
integer Nstep, Xstep
double precision x, t, dt, dx
double precision K1, K2, Vmax, KM, P, Po
double precision Co, Qo, Cop,DeltaQ
double precision A1, A2, A3
cccccccccccccccccccccccccccccccccccccccccccccccccc
t = 1.0d0
x = 0.5d0
Xstep=2**8
dx=1/Xstep
dt=0.0005d0
Nstep=t/dt
Co = 275.0d-6
Vmax = 14.50d-9
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
print *, "t, x,Nstep, Xstep dx,dt",t,x,Nstep, Xstep,dx,dt
print*, "Co, Vmax", Co, Vmax
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
return
end

the results i get when i run it with f77 f1.f (f1.f is what i called the file) is this:
t, x,Nstep, Xstep dx,dt 1. 0.5 1999 256 0. 0.0005
Co, Vmax 0.000275 1.45E-08

with the first line i have major problmes: Nstep=1/.0005 and should be 2000, why is it 1999 ...and dx=1/Xstep=0 but it should be equal to .0039

why am i getting such funny results?
 
Technology news on Phys.org
When converting to int numer is not rounded, but truncated, so if for a given accuracy of calculations 1/.0005=1999.9999999999999999 it gets truncated to 1999.

dx is calculated as a result of integer division - 1/256, in integers it gives 0. My memory on Fortran is fuzzy here, but obviously you have to force it to calculate float result; in C 1./Xstep will do the trick.
 
Thanks a lot Borek. I changed Xstep and Nstep from integers to real and now the calculations come out right. I am sure i will have another silly question in a few minutes and your help is muuuuuuuuuuuuuuuuuuuuuuuuuuuuch appreciated
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 17 ·
Replies
17
Views
7K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
7
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 26 ·
Replies
26
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
1
Views
2K