#bash has no fractional numbers: (( )) gives an error on 10.5,
#and > inside [[ ]] compares text, not numbers
a=10.5
b=9.25
[[ $a > $b ]] && textGreater=true || textGreater=false
#textGreater is false: as text "1" goes before "9"
#bc compares numbers and prints 1 for true, 0 for false
[[ $(bc <<< "$a > $b") == 1 ]] && isGreater=true || isGreater=false
#isGreater is true
#awk counts in binary double, like C, so equality needs a delta
[[ $(awk 'BEGIN { b = (0.3 * 3) + 0.1; print (b == 1.0) }') == 1 ]] \
&& isEqual1=true || isEqual1=false
#isEqual1 is false
[[ $(awk 'BEGIN { b = (0.3 * 3) + 0.1; d = 1.0 - b; if (d < 0) d = -d; print (d < 1E-9) }') == 1 ]] \
&& isEqual2=true || isEqual2=false
#isEqual2 is true
#bc counts in decimal, so the same sum is exact there
[[ $(bc <<< "(0.3 * 3) + 0.1 == 1.0") == 1 ]] && isEqual3=true || isEqual3=false
#isEqual3 is true
echo "textGreater is $textGreater"
echo "isGreater is $isGreater"
echo "isEqual1 is $isEqual1"
echo "isEqual2 is $isEqual2"
echo "isEqual3 is $isEqual3"