oliverthered

Floating point comparison

Nov 2nd, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.30 KB | None | 0 0
  1. #!/bin/bash
  2. # Floating point comparison
  3. # (C) Oliver Stieber oliverthered [email protected]
  4. # Public Domain
  5.  
  6. f1=0.01
  7. f2=0.2
  8.  
  9. float_cp () {
  10.     IFS="."
  11.     read -ra float1 <<< "$1"
  12.     read -ra float2 <<< "$2"
  13.     while [[ ${#float2[1]} -lt ${#float1[1]} ]]
  14.     do
  15.         float2[1]+="0"
  16.     done
  17.     while [[ ${#float2[1]} -gt ${#float1[1]} ]]
  18.     do
  19.         float1[1]+="0"
  20.     done
  21.     if [[ ${float1[0]} -gt ${float2[0]} || (${float1[0]} -eq ${float2[0]} && ${float1[1]} -gt ${float2[1]}) ]]; then
  22.         echo 1
  23.     elif [[ ${float1[0]} -eq ${float2[0]} && ${float1[1]} -eq ${float2[1]} ]]; then
  24.         echo 0
  25.     else
  26.         echo -1
  27.     fi
  28. }
  29.  
  30. if [[ "$(float_cp $f1 $f2)" -eq 0 ]]; then
  31.     echo "yay eq"
  32. elif  [[ "$(float_cp $f1 $f2)" -gt 0 ]]; then
  33.     echo "may gt"
  34. elif  [[ "$(float_cp $f1 $f2)" -lt 0 ]]; then
  35.     echo "nay lt"
  36. fi
  37.  
  38. tests ()
  39. {
  40.     echo "eq"
  41.     if [[ "$(float_cp 0.1 0.1)" -eq 0 ]]; then
  42.         echo "pass"
  43.     else
  44.         echo "fail"
  45.     fi
  46.     if [[ "$(float_cp 10.11 10.11)" -eq 0 ]]; then
  47.         echo "pass"
  48.     else
  49.         echo "fail"
  50.     fi
  51.     if [[ "$(float_cp .11 0.11)" -eq 0 ]]; then
  52.         echo "pass"
  53.     else
  54.         echo "fail"
  55.     fi
  56.     if [[ "$(float_cp 0.11 .11)" -eq 0 ]]; then
  57.         echo "pass"
  58.     else
  59.         echo "fail"
  60.     fi
  61.     if [[ "$(float_cp 0.110 .11)" -eq 0 ]]; then
  62.         echo "pass"
  63.     else
  64.         echo "fail"
  65.     fi
  66.     if [[ "$(float_cp 0.11 .110)" -eq 0 ]]; then
  67.         echo "pass"
  68.     else
  69.         echo "fail"
  70.     fi
  71.     echo "gt"
  72.     if [[ "$(float_cp 0.2 0.1)" -gt 0 ]]; then
  73.         echo "pass"
  74.     else
  75.         echo "fail"
  76.     fi
  77.     if [[ "$(float_cp 2.1 0.1)" -gt 0 ]]; then
  78.         echo "pass"
  79.     else
  80.         echo "fail"
  81.     fi
  82.     if [[ "$(float_cp 20.11 10.11)" -gt 0 ]]; then
  83.         echo "pass"
  84.     else
  85.         echo "fail"
  86.     fi
  87.     if [[ "$(float_cp 10.21 10.11)" -gt 0 ]]; then
  88.         echo "pass"
  89.     else
  90.         echo "fail"
  91.     fi
  92.     if [[ "$(float_cp .12 0.11)" -gt 0 ]]; then
  93.         echo "pass"
  94.     else
  95.         echo "fail"
  96.     fi
  97.     if [[ "$(float_cp 0.12 .11)" -gt 0 ]]; then
  98.         echo "pass"
  99.     else
  100.         echo "fail"
  101.     fi
  102.     if [[ "$(float_cp 0.120 .11)" -gt 0 ]]; then
  103.         echo "pass"
  104.     else
  105.         echo "fail"
  106.     fi
  107.     if [[ "$(float_cp 0.12 .110)" -gt 0 ]]; then
  108.         echo "pass"
  109.     else
  110.         echo "fail"
  111.     fi
  112.     echo "lt"
  113.     if [[ "$(float_cp 0.1 0.2)" -lt 0 ]]; then
  114.         echo "pass"
  115.     else
  116.         echo "fail"
  117.     fi
  118.     if [[ "$(float_cp 0.1 21)" -lt 0 ]]; then
  119.         echo "pass"
  120.     else
  121.         echo "fail"
  122.     fi
  123.     if [[ "$(float_cp 10.11 20.11)" -lt 0 ]]; then
  124.         echo "pass"
  125.     else
  126.         echo "fail"
  127.     fi
  128.     if [[ "$(float_cp 10.11 10.21)" -lt 0 ]]; then
  129.         echo "pass"
  130.     else
  131.         echo "fail"
  132.     fi
  133.     if [[ "$(float_cp .11 0.12)" -lt 0 ]]; then
  134.         echo "pass"
  135.     else
  136.         echo "fail"
  137.     fi
  138.     if [[ "$(float_cp 0.11 .12)" -lt 0 ]]; then
  139.         echo "pass"
  140.     else
  141.         echo "fail"
  142.     fi
  143.     if [[ "$(float_cp 0.11 .120)" -lt 0 ]]; then
  144.         echo "pass"
  145.     else
  146.         echo "fail"
  147.     fi
  148.     if [[ "$(float_cp 0.110 .12)" -lt 0 ]]; then
  149.         echo "pass"
  150.     else
  151.         echo "fail"
  152.     fi
  153.    
  154. }
  155.  
  156. echo "$(tests)"
Advertisement
Add Comment
Please, Sign In to add comment