package com.njcn.gather.tools.comtrade.comparewave.core.algorithm;

/**
 * 提供float版本的数学函数，避免double精度带来的误差
 * 确保与C代码（使用float）保持完全一致的精度
 * @author hongawen
 */
public class FloatMath {
    
    /**
     * float版本的平方根函数
     */
    public static float sqrt(float value) {
        return (float)Math.sqrt(value);
    }
    
    /**
     * float版本的正弦函数
     */
    public static float sin(float angle) {
        return (float)Math.sin(angle);
    }
    
    /**
     * float版本的余弦函数
     */
    public static float cos(float angle) {
        return (float)Math.cos(angle);
    }
    
    /**
     * float版本的正切函数
     */
    public static float tan(float angle) {
        return (float)Math.tan(angle);
    }
    
    /**
     * float版本的反正切函数（两个参数）
     */
    public static float atan2(float y, float x) {
        return (float)Math.atan2(y, x);
    }
    
    /**
     * float版本的反正切函数（一个参数）
     */
    public static float atan(float value) {
        return (float)Math.atan(value);
    }
    
    /**
     * float版本的反正弦函数
     */
    public static float asin(float value) {
        return (float)Math.asin(value);
    }
    
    /**
     * float版本的反余弦函数
     */
    public static float acos(float value) {
        return (float)Math.acos(value);
    }
    
    /**
     * float版本的指数函数
     */
    public static float exp(float value) {
        return (float)Math.exp(value);
    }
    
    /**
     * float版本的对数函数
     */
    public static float log(float value) {
        return (float)Math.log(value);
    }
    
    /**
     * float版本的以10为底的对数函数
     */
    public static float log10(float value) {
        return (float)Math.log10(value);
    }
    
    /**
     * float版本的幂函数
     */
    public static float pow(float base, float exponent) {
        return (float)Math.pow(base, exponent);
    }
    
    /**
     * float版本的绝对值函数
     */
    public static float abs(float value) {
        return Math.abs(value);
    }
    
    /**
     * float版本的向上取整函数
     */
    public static float ceil(float value) {
        return (float)Math.ceil(value);
    }
    
    /**
     * float版本的向下取整函数
     */
    public static float floor(float value) {
        return (float)Math.floor(value);
    }
    
    /**
     * float版本的四舍五入函数
     */
    public static float round(float value) {
        return Math.round(value);
    }
    
    /**
     * float版本的最大值函数
     */
    public static float max(float a, float b) {
        return Math.max(a, b);
    }
    
    /**
     * float版本的最小值函数
     */
    public static float min(float a, float b) {
        return Math.min(a, b);
    }
    
    /**
     * 将弧度转换为角度
     */
    public static float toDegrees(float radians) {
        return (float)Math.toDegrees(radians);
    }
    
    /**
     * 将角度转换为弧度
     */
    public static float toRadians(float degrees) {
        return (float)Math.toRadians(degrees);
    }
}