Anonymous user
Entropy: Difference between revisions
m
→version 2: added/changed whitespace and comments.
(added FreeBasic) |
m (→version 2: added/changed whitespace and comments.) |
||
Line 1,542:
===version 2===
REXX doesn't have a BIF for '''LOG''' or '''LN''', so the subroutine (function) '''LOG2''' is included herein.
<br>The LOG2 subroutine is only included here for functionality, not to document how to calculate LOG2 using REXX. ▼
<lang rexx>/*REXX program calculates the information entropy for a given char str.*/▼
parse arg $; if $=='' then $=1223334444 /*obtain optional input*/▼
▲
do j=1 for L; _=substr($,j,1) /*process each character in $ str*/▼
▲<lang rexx>/*REXX program calculates the information entropy
if @._==0 then do; n=n+1 /*if unique, bump char counter. */▼
numeric digits 50
#=0; @.=0; L=length($); $$= /*define handy-dandy REXX variables. */
$$=$$ || _ /*add this character to the $$ list. */
end
@._
end /*j*/
sum=0 /*
do i=1 for
sum=sum - @._/L * log2(@._/L) /*add (negatively) the char entropies. */
end /*i*/
say ' input string: ' $
say 'string length: ' L
say ' unique chars: '
say 'the information entropy of the string ──► ' format(sum,,12) " bits."
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────LOG2 subroutine───────────────────────────*/
log2: procedure; parse arg x 1
numeric digits digits()+5 /* [↓] precision of E must be
e=2.7182818284590452353602874713526624977572470936999595749669676277240766303535
do while ig &
if
do k=1; _=-_*x; z=z+_/k; if z=p then leave; p=z; end /*k*/
r=z+ii; if arg()==2 then return r; return r/log2(2,0)</lang>
{{out}} when using the default input of: <tt> 1223334444 </tt>
<pre>
|