# Weird fortran problem (Assigned variable value doesn't match up with output)

• Fortran

## Main Question or Discussion Point

I ran into a kind of strange thing today while coding. I needed Pi in a program, so I used 2*accos(0.0) to pull it out, but my answers were slightly off. I checked the Pi calculated and it was off after a few decimal places.

"Odd", I thought, and just decided to put in Pi as an assigned number. However, this still didn't solve the problem! No matter how I inputted it, it was being altered somehow by the program. I whipped up a really quick program to demonstrate what I'm talking about.

program probs
real(kind=8)::v

v=3.141592653589793238462643
write(*,*)v
end

if you check the output( assuming it's not just my machine or compiler for some reason) you'll see the values for v and the number inputted for it are not the same.

I'm guessing it has something to do with using the kind flag, but I'm not much of a comp sci person, and my searches didn't turn up anything useful.

Anyone have any clue how to fix this? If it is related to kind, how can I keep high precision while avoiding this problem?

## Answers and Replies

Related Programming and Computer Science News on Phys.org
The reason being the value you are assigning is one type and the variable on the left is a different type....if you are going to be declaring variables of different types that the default, you need to assign value of different type than the default; in fact, they should be declared of the exact same type...follow? maybe an example:

Code:
program probs
integer, parameter :: rrr=SELECTED_REAL_KIND(15,307)
real(KIND=rrr) :: v

v=3.141592653589793238462643_rrr
write(*,*)v
end
Here, we first declare a "type"...that's the integer variable rrr.
Then, we declare the variable v of that kind
Then, in order to assign a literal constant to that variable with suffix it with the same "type"...with '_rrr'

Now, test this program and you will see.

AlephZero