#!/usr/bin/env python3
"""
@file stddev.py
@brief Program for computing sample standard deviation from standard input.
@details
Reads floating point numbers from standard input until EOF, computes the
sample standard deviation using functions from the projects math library,
and prints the result to standard output.
@author Jan Kostečka
@date 2026-04-18
"""

import sys
import src.mathlib as mathlib


def main() -> int:
    """@brief Read input values and compute sample standard deviation.

    Reads floating-point numbers from standard input until EOF,
    computes the sample standard deviation, and prints the result.

    @return Exit code 0 on success, non zero on invalid input or too few values.
    """
    numbers_count = 0
    numbers_sum = 0.0
    numbers_sum_sq = 0.0

    try:
        for line in sys.stdin:
            for token in line.split():
                value = float(token)
                numbers_count += 1
                numbers_sum = mathlib.add(numbers_sum, value)
                numbers_sum_sq = mathlib.add(
                    numbers_sum_sq,
                    mathlib.multiply(value, value)
                )
    except ValueError:
        print("Neplatny vstup.", file=sys.stderr)
        return 1

    if numbers_count < 2:
        print("Je potreba alespon 2 ciselne hodnoty.", file=sys.stderr)
        return 1

    mean = mathlib.divide(numbers_sum, numbers_count)
    variance_part = mathlib.subtract(
        numbers_sum_sq,
        mathlib.multiply(numbers_count, mathlib.multiply(mean, mean))
    )
    result = mathlib.sqrt(
        mathlib.multiply(
            mathlib.divide(1.0, numbers_count - 1),
            variance_part
        )
    )

    print(f"{result:.10g}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())