// --------------------------------------------------------------------------------------------
// archivo  : xsmath.h
// objetivo : header de funciones matematicas
// --------------------------------------------------------------------------------------------

#ifndef __xsMath_H__
#define __xsMath_H__

// Incluyo la librería Easy
#include "xsEasyC.h"

// Se Incluyen librerías de c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#include <stdbool.h>
#include "math.h"


// Objetivo: Obtener el arco coseno de x expresado en radianes
//         : Retorna el arco coseno en radianes en el intervalo [0,pi]
Doble arcoCoseno(Doble x);

// Objetivo: Obtener el arco seno de x expresado en radianes
//         : Retorna el arco seno en radianes en el intervalo [0,pi]
Doble arcoSeno(Doble x);

// Objetivo: Obtener el arco tangente de x expresado en radianes
//         : Retorna el arco tangente en radianes en el intervalo [0,pi]
Doble arcoTangente(Doble x);

// Objetivo: Obtener el coseno de un ángulo de x radianes
//         : Retorna el coseno en un ángulo de x radianes
Doble coseno(Doble x);

// Objetivo: Obtener la diferencia positiva entre x,y
// Retorna : La Diferencia positiva
Doble diferenciaPositiva(Doble x,Doble y);

// Objetivo: Verifica si x es multiplo de y
// Retorna : VERDAD/FALSO
Logico esMultiplo(Entero x, Entero y);


// Objetivo: Obtener la base-e exponencial función de x
// Retorna : El exponencial valor de x
Doble exponencial(Doble x);

// Objetivo: Obtener la hipotenusa de un angulo recto con catetos x,y
// Retorna : la hipotenusa
Doble hipotenusa(Doble x,Doble y);

// Objetivo: Obtener el logaritmo natural de x
// Retorna : El logaritmo natural de x
Doble logaritmo(Doble x);

// Objetivo: Obtiene el valor mas grande de x,y
// Retorna : El valor máximo
Doble maximoValor(Doble x,Doble y);

// Objetivo: Obtiene el valor menor de x,y
// Retorna : El valor máximo
Doble minimoValor(Doble x,Doble y);

// Objetivo: Elevar base a una potencia exponente
// Retorna : El resultado de elevar base a la potencia exponente
Doble potencia(Doble base,Doble exponente);

// Objetivo: Obtiene la raiz cuadrada de x
// Retorna : La raiz cuadrada de x
Doble raizCuadrada(Doble x);

// Objetivo: Obtiene la raiz cúbica de x
// Retorna : La raiz cúbica de x
Doble raizCubica(Doble x);

// Objetivo: Redondear un numero x al entero mas cercano
// Retorna : El Numero redondeado
Doble redondear(Doble x);

// Objetivo: Redondear un numero x al entero
// Retorna : El Numero redondeado
Doble redondearAbajo(Doble x);

// Objetivo: Redondear un numero x al entero mayor
// Retorna : El Numero redondeado
Doble redondearArriba(Doble x);

// Objetivo: Obtener el residuo decimal de una división
// Retorna : El Residuo de la división
Doble residuoDecimal(Doble dividendo,Doble divisor);

// Objetivo: Restar 2 numeros binarios
//         : Retorna la Cadena con el Numero binario resultante de la Resta
Caracter* restaBinaria(Caracter* binario1, Caracter* binario2);

// Objetivo: Restar 2 numeros hexadecimales
//         : Retorna la Cadena con el Numero hexadecimal resultante de la Resta
Caracter* restaHexadecimal(Caracter* hexadecimal1, Caracter* hexadecimal2);

// Objetivo: Restar 2 numeros octales
//         : Retorna la Cadena con el Numero octal resultante de la Resta
Caracter* restaOctal(Caracter* octal1, Caracter* octal2);

// Objetivo: Obtener el seno de un ángulo de x radianes
//         : Retorna el seno de un ángulo de x radianes
Doble seno(Doble x);

// Objetivo: Separar la parte entera y la decimal de un Doble
//         : Retorna la parte fraccionaria y en la parámetro deja la parte entera
Doble separarEnteroDecimal(Doble doble, Doble* parteEntera);

// Objetivo: Sumar 2 numeros binarios
//         : Retorna la Cadena con el Numero binario resultante de la Suma
Caracter* sumaBinaria(Caracter* binario1, Caracter* binario2);

// Objetivo: Sumar 2 numeros hexadecimales
//         : Retorna la Cadena con el Numero hexadecimal resultante de la Suma
Caracter* sumaHexadecimal(Caracter* hexadecimal1, Caracter* hexadecimal2);

// Objetivo: Sumar 2 numeros octales
//         : Retorna la Cadena con el Numero octal resultante de la Suma
Caracter* sumaOctal(Caracter* octal1, Caracter* octal2);

// Objetivo: Obtener la tangente de un ángulo de x radianes
//         : Retorna la tangente de un ángulo de x radianes
Doble tangente(Doble x);

// Objetivo: Truncar un numero x
// Retorna : El Numero truncado
Doble truncar(Doble x);

// Objetivo: Obtener el valor absoluto de un Doble
// Retorna : El valor absoluto
Doble valorAbsolutoDoble(Doble x);

// fin de la Definición del Archivo
#endif