#!/bin/bash

#==BEGIN Function Definitions==
randFloat() {
    # Desc: Output random float with no newline
    # Usage: randFloat arg1
    # Inputs: arg1: number of decimal places
    # Output: stdout: float as decimal string
    # Version: 0.0.1
    # Note: Outputs float from 0.000... to 0.999...
    # Note: Default number of decimals is 5.
    # Ref/Attrib: Integer test regular expression https://stackoverflow.com/a/806923

    # Validate input
    if [[ $# -eq 0 ]]; then
    	: # do nothing
    elif [[ $# -eq 1 ]]; then
    	arg1=$1;
    	RETEST1='^[0-9]+$'
    	if ! [[ $arg1 =~ $RETEST1 ]]; then
    	    echo "ERROR:Not an integer." >&2; exit 1;
    	fi;
    else
    	echo "ERROR:Invalid number of arguments:${@}";
    fi;

    # Produce output
    decimals="$(head -c ${arg1:-5} < <(LC_ALL=C tr -cd "[:digit:]" < <(cat /dev/urandom)))";
    echo 0."$decimals";
}
#==END Function Definitions==

#==BEGIN sample code==
dec=70
time randFloat;
time (randFloat && randFloat && randFloat && randFloat && randFloat && randFloat && randFloat && randFloat && randFloat && randFloat);
time (randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec" && randFloat "$dec");
time (randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null && randFloat "$dec" &>/dev/null);
#==END sample code==