Perché gli elementi di una matrice sono formattati come zeri quando vengono moltiplicati per 1/2 o 1/3?

Sto scrivendo gli elementi di un array come segue:

write(6,'(i4,200(1x,e15.7))')Jtot0, (a*PJjv(i,Jtot0,j,iv),i=1,nenerdif,100) 

dove a è una costante. Tuttavia, quando questa costante è uguale a 1/2 o 1/3 l’output è zero e se è uguale a 1, ogni cosa va bene. Gli elementi dell’array sono real*8 .

Come posso superare questo, dando che sono obbligato a moltiplicare per un fattore di 1/3?

In Fortran 1/2 è un’operazione di divisione intera che arriverà a, in questo caso, a 0 . Lo stesso per 1/3 . Se si desidera ottenere un risultato reale, eseguire un’operazione di divisione reale, ad esempio 1.0/2.0 . Nota che assegnare il risultato di 1/2 a una variabile reale imposterà la variabile reale su 0.0 , cioè la divisione intera risulterà in 0 e l’assegnazione, che accade dopo, proietterà quel valore sulla sua rappresentazione reale più vicina.

Questo business della divisione integer che produce risultati interi è molto comune nei linguaggi di programmazione.