| |
|
|
p.specht
| Aus anderen Programmiersprachen sind Funktionen bekannt wie z.B.:
x!=Intf(y!) ... Floatingpoint-Ganzzahlteil x!=Frac(y!) ... Nachkomma-Teil einer Gleitkommazahl x!=Floor(y!) ... Die nächstkleinere Float-Ganzzahl ( -1.2 >>> -2.0 ) x!=Ceil(y!) ... Ceiling=Plafond: Die nächstgrößer-oder-gleiche Float-Ganzzahl m!=Modf(a!,b!) ... Floatingpoint-Modulo = Divisionsrest, Vorzeichen von b! m!=Remn(a!,b!) ..Floatingpoint-Remnant= Divisionsrest, Vorzeichen von a! x&=Sgn(x!) ... Signum-Funktion (-1, 0, 1) x&=IsNeg(x!) ... liefert Wahrheitswert 1 bei x!<0
Hinweis: Die nachstehenden Procs bauen aufeinander auf; der Exponent von Floatingpoint-Zahlen kann eventuell auf den Bereich -322 bis +308 erweitert werden.
Windowtitle "Intf(), Frac(), Floor(), Ceil(), Modf(), Remn(), Sgn(), IsNeg()"
' Ergänzung von XProfan um mathematischen Definitionen folgende Gleitkommaoperationen
' "MDFOp b0.1": Early-Beta Version, (CL) CopyLeft 2013-04 by P.Specht(at)GMX.at, Wien
' Ohne jede Art von Gewähr!: Die Nutzung ist alleiniges Risiko des/der Anwender/s/in.
randomize:font 2:Set("decimals",18)
cls rnd(8^8):var s$=mkstr$(" ",18)+"! ":declare c$
while 1
locate 2,1:print " Testzahl:"+s$:locate 2,14:input c$:c$=translate$(c$,",",".")
locate 4,1:print " Testwert:"+s$:locate 4,14:print format$("%g",val(c$))
locate 7,1:print " Intf:"+s$:locate 7,14:print format$("%g",Intf(val(c$)))
locate 9,1:print " Fraction:"+s$:locate 9,14:print format$("%g",frac(val(c$)))
locate 11,1:print " Floor:"+s$:locate 11,14:print format$("%g",floor(val(c$)))
locate 13,1:print " Ceiling:"+s$:locate 13,14:print format$("%g",ceil(val(c$)))
locate 15,1:print "Modulo -3.0:"+s$:locate 15,14:print format$("%g",modf(val(c$),-3 ))
locate 17,1:print "Remnant-3.0:"+s$:locate 17,14:print format$("%g",remn(val(c$),-3 ))
locate 19,1:print " Signum:"+s$:locate 19,14:print format$("%g",sgn(val(c$)))
locate 19,1:print " IsNeg:"+s$:locate 19,14:print format$("%g",IsNeg(val(c$)))
endwhile
proc sgn :parameters x!
' Signum-Funktion: -1,0,+1
return (x!>0)-(x!<0)
endproc
proc floor :parameters x!
' Gaussklammer-Funktion
case abs(x!)<(10^-35):return 0
case x!>0:return intf(x!)
return (abs(x!-intf(x!)) < 10^-35)-intf(abs(x!-1))
endproc
proc ceil :parameters x!
' Ceiling-Funktion
return -1*floor(-1*x!)
endproc
proc modf :parameters x!,y!
' Q: https://de.wikipedia.org/wiki/Modulo
case abs(x!)<10^-35:return 0
case abs(y!)<10^-35:return x!
return sgn(y!)*abs(x!-y!*floor(x!/y!))
endproc
proc remn :parameters x!,y!
' Q: https://de.wikipedia.org/wiki/Modulo , wie in ADA
case abs(x!)<(10^-35):return 0
case abs(y!)<(10^-35):return x!
return sgn(x!)*abs(x!-y!*floor(x!/y!))
endproc
proc IsNeg :parameters x!
return byte(Addr(x!),7)&%10000000>>7
endproc
proc frac :parameters x!
var s!=sgn(x!)
x!=abs(x!)
x!=x!-round(x!,0)
case x!<0:x!=1+x!
return s!*x!
endproc
proc intf :parameters x!
var s!=sgn(x!)
x!=abs(x!)
x!=x!-frac(x!)
return s!*x!
endproc
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 09.05.2021 ▲ |
|
|
|