Unter awk
Da kaum Informationen weitergegeben werden, muss man auf Methoden zurückgreifen, die es erlauben, Zustandsinformationen als Teil der Funktionsrückgabe zu übergeben, ohne die Verwendbarkeit dessen, was weitergegeben wird, zu gefährden:
jot - -5 5 | mawk 'function _(__,___) {
return (__~(___=" ")) \
\
? substr("",sub("^[ ]?[+- ]*",\
substr(" -",__~__,index("_"___,___)-\
(__~"[-]")),__))\
(__~"[-]"?"":___)__\
: (+__<-__?___:(___)___)__
} BEGIN { CONVFMT=OFMT="%.17g"
} {
print "orig", +(__=$(__<__))<-__?__:" "__,
"f(n)....", _(__),_(_(__)),_(_(_(__))),
_(_(_(_(__)))), _(_(_(_(_(__)))))
}' |gcat -n | lgp3 5
1 orig -5 f(n).... -5 5 -5 5 -5
2 orig -4 f(n).... -4 4 -4 4 -4
3 orig -3 f(n).... -3 3 -3 3 -3
4 orig -2 f(n).... -2 2 -2 2 -2
5 orig -1 f(n).... -1 1 -1 1 -1
6 orig 0 f(n).... 0 -0 0 -0 0
7 orig 1 f(n).... 1 -1 1 -1 1
8 orig 2 f(n).... 2 -2 2 -2 2
9 orig 3 f(n).... 3 -3 3 -3 3
10 orig 4 f(n).... 4 -4 4 -4 4
11 orig 5 f(n).... 5 -5 5 -5 5
Die Grenze ist also, dass nur Ganzzahlen oder Fließkommazahlen, die bereits in einem String-Format vorliegen, ohne Risiko verwendet werden können, da ein zusätzliches ASCII-Leerzeichen \040
wird als Statusinformation vorangestellt
Diese Methode hat den Vorteil, dass
-
es ist bereit, Ihnen eine "Negativ-Null" zu liefern,
-
für ganze Zahlen kleiner als 2^53
in absoluten Zahlen, einfach ein Pluszeichen hinzufügen,
d.h. +f(f(_))
zum Funktionsaufruf selbst würde eine implizite Typ-Casting für Sie durchgeführt, und der resultierende Wert wird wieder numerisch sein
für Big Integer, einfach substr()
ohne führende Leerzeichen
-
mit großen Zahlen umgehen, ohne den Verlust von Präzision, die durch die Umwandlung in einen doppelt präzisen Float entsteht
`
1 orig -99999999999999999999999999999999
f(n)....
-99999999999999999999999999999999
99999999999999999999999999999999
-99999999999999999999999999999999
99999999999999999999999999999999
-99999999999999999999999999999999
2 orig -1239999999999999999999999999999
f(n).... -1239999999999999999999999999999
1239999999999999999999999999999
-1239999999999999999999999999999
1239999999999999999999999999999
-1239999999999999999999999999999`
6 Stimmen
Um welche Stelle ging es bei diesem Vorstellungsgespräch?