Bonjour à tous,

J'ai commencé Fortran hier pour m'adapter à un projet déjà existant, je suis plutôt habitué à python...
j'ai donc realisé un petit programme (voir ci-dessous) qui est sensé prendre en entrée une liste de 0 et de 1 et me donner l'entropie de shannon de ce signal.
cependant, quand je tape une liste à la main quand j'execute mon programme dans le terminal il me retourne "NaN"....
j'ai des difficulté à comprendre la source problème.
Merci !


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program testEnt
 
	implicit none
	integer, dimension(:), allocatable::sig
	read(*,*),sig
	print*, Entropy(sig)
 
contains 
 
	!--fonction to get log in base 2
	real function log2(x)
  		implicit none
  		real, intent(in) :: x
  		log2 = log(x) / log(2.)
	end function log2
 
	!--fonction to get the Shannon Entropy from list of booleans
	real function Entropy(signal)
		implicit none 
		integer, dimension(:), intent(inout)::signal 
		integer::n
		integer::nb1
		n=size(signal)
		nb1=sum(signal)
		Entropy=-((real(nb1)/n)*log2(real(nb1)/n)+(real((n-nb1))/n)*log2(real(n-nb1)/n))
	end function Entropy 
 
end program testEnt