Sommatoria in fortran
salve ragazzi, sono un neofita di fortran e non capisco perchè il seguente codice nonostante compli e mi calcoli Q_fin e Q_in pone Q=0. Cioè legge l inizializzazione fuori dal ciclo do e rimane tale. please help
program readwrite implicit none real a(200,4),Q_in,Q_fin,Q,Q_tot,v_med integer i,j,nj character*40 nome write(6,*) 'nome file' read(5,'(a)') nome open(unit=16,file=nome) nj=180 do i=1,nj read(16,*) (a(i,j),j=1,4) enddo Q_in=(a(1,1)-a(1,3))/2*a(1,2) Q_fin=(2-a(180,1))/2*a(180,2) Q=0. do i=1,nj-1 Q=Q+1/2*((a(i+1,2)+a(i,2))*(a(i+1,1)-a(i,1))) enddo Q_tot=Q+Q_in+Q_fin v_med=Q_tot/2 write(6,*) 'velocita media', v_med write(6,*) 'Q', Q write(6,*) 'Q_in', Q_in write(6,*) 'Q_fin', Q_fin end
Risposte
Benvenuto al forum e buona permanenza; visto che è il tuo primo messaggio, te lo sposto io nella sezione adatta (informatica), per le prossime volte ti invito a dare un'occhiata al regolamento e a postare nella sezione corretta.
[ot]Fortran O.o
Nel 2018? Ma che scherziamo?[/ot]
Nel 2018? Ma che scherziamo?[/ot]
Non sono un esperto di Fortran ma la mia ipotesi è che questa espressione possa essere valutata a zero:
Se il calcolo venisse in effetti fatto valutando prima \(1/2\) come numeri interi e poi facendo la moltiplicazione avresti uno zero. Ti consiglio di usare \(0.5\) se vuoi moltiplicare per un mezzo o inserire delle parentesi se vuoi fare qualcosa di diverso.
@feddy: Anche se non è certamente tra i linguaggi più comuni, ci sono ancora diversi settori in cui Fortran viene usato (HPC principalmente) e ha subito diversi miglioramenti negli anni (l'ultimo standard è del 2010).
1/2*((a(i+1,2)+a(i,2))*(a(i+1,1)-a(i,1)))
Se il calcolo venisse in effetti fatto valutando prima \(1/2\) come numeri interi e poi facendo la moltiplicazione avresti uno zero. Ti consiglio di usare \(0.5\) se vuoi moltiplicare per un mezzo o inserire delle parentesi se vuoi fare qualcosa di diverso.
@feddy: Anche se non è certamente tra i linguaggi più comuni, ci sono ancora diversi settori in cui Fortran viene usato (HPC principalmente) e ha subito diversi miglioramenti negli anni (l'ultimo standard è del 2010).