diff --git a/addition/add b/addition/add old mode 100644 new mode 100755 index e69de29..a804392 --- a/addition/add +++ b/addition/add @@ -0,0 +1,24 @@ +#!/bin/sh +# add $2 to $1 and return +[ -z "${1##*.*}" -o -z "${2##*.*}" ] && { # if float # dylanaraps/pure-sh-bible#check-if-a-number-is-a-float +# modified to check $1 & $2 + f1="${1##*.}"; f2="${2##*.}" # whole is ${1%.$f1} # dot required + # eq is $1+$2 -- $f1 + $f2 -- then add $1 & $2 + wo="$((${1%.$f1}+${2%.$f2}))" # whole digit, this is preset and not redeclared + # this is because we may need to carry + while [ "$f1" ]; do + while [ "$f2" ]; do + next2="${f2#?}"; next1="${f1#?}" + [ "$((${f1%$next1} + ${f2%$next2}))" -gt 9 ] && { + oo="$o"; [ "$o" ] && { + : $((oo+=1)) + } || : $((wo+=1)) + o="$((${f1%$next1} + ${f2%$next2}))"; o="${o#?}"; o="$oo$o"; unset oo # unset to save ram + } || o="$o$((${f1%$next1} + ${f2%$next2}))" + f2="$next2"; f1="${next1}" + done + done + echo "$wo.${o:-0}" +} || { # if not just do basic addition + echo $(($1+$2)) +}