v1 0.0.0

Scalar mathematical library for neural networks.
Documentation
// libs/v1/src/finance/value.rs
//
//! # Инвестиционные метрики (Value Metrics)
//!
//! Модуль содержит чистые скалярные функции для оценки стоимости
//! капитала и темпов роста инвестиций во времени.

/// # Совокупный среднегодовой темп роста (CAGR)
///
/// Рассчитывает геометрическую среднюю доходность инвестиций за период
/// (например, за несколько лет), полностью сглаживая промежуточные колебания.
///
/// Если начальная стоимость или периоды меньше или равны нулю, возвращает `0.0`.
///
/// ### Примеры
/// ```
/// use v1::finance::value::calculate_cagr;
///
/// // Инвестиция выросла со 100$ до 144$ за 2 года
/// let cagr = calculate_cagr(144.0, 100.0, 2.0);
/// // (144 / 100)^(1/2) - 1 = 1.2 - 1 = 0.2 (20%)
/// assert!((cagr - 0.2).abs() < 1e-6);
/// ```
pub fn calculate_cagr(final_value: f32, initial_value: f32, periods: f32) -> f32 {
    // Сначала отсекаем NaN со стороны IEEE 754, так как они ломают логические сравнения
    if final_value.is_nan() || initial_value.is_nan() || periods.is_nan() {
        return 0.0;
    }
    
    if initial_value <= 0.0 || periods <= 0.0 || final_value <= 0.0 {
        return 0.0;
    }

    // Формула: (V_final / V_initial) ^ (1 / periods) - 1.0
    (final_value / initial_value).powf(1.0 / periods) - 1.0
}