juegos

Juegos de terminal de Pancho: Catan (TUI, GUI, web, servidor, PicoCalc), ajedrez, calculadora y minijuegos
git clone https://git.lu3dhn.xyz/juegos.git
Log | Files | Refs

exact.h (1715B)


      1 /* exact.h - valores exactos de la calculadora: (a + b·√r)/d · π^p
      2  * (fracciones, radicales simples y multiplos de π). Todo en int64 con chequeo de
      3  * desborde: si una operacion no se puede representar devuelve falso y la cuenta
      4  * sigue en decimal. */
      5 #ifndef EXACT_H
      6 #define EXACT_H
      7 #include <stdint.h>
      8 #include <stdbool.h>
      9 #include "dec.h"
     10 
     11 typedef struct {
     12     int64_t a, b, r, d;     /* d > 0; b = 0 => r = 1; si b != 0, r > 1 libre de cuadrados */
     13     uint8_t p;              /* 1 = multiplicado por π (entonces b = 0) */
     14 } Ex;
     15 
     16 bool ex_rat(Ex *x, int64_t a, int64_t d);      /* a/d normalizado */
     17 bool ex_norm(Ex *x);
     18 static inline bool ex_is_rat(const Ex *x) { return x->b == 0 && !x->p; }
     19 static inline bool ex_is_int(const Ex *x) { return ex_is_rat(x) && x->d == 1; }
     20 static inline bool ex_is_zero(const Ex *x) { return x->a == 0 && x->b == 0; }
     21 bool ex_eq(const Ex *x, const Ex *y);
     22 
     23 bool ex_add(Ex *o, const Ex *x, const Ex *y);
     24 bool ex_sub(Ex *o, const Ex *x, const Ex *y);
     25 bool ex_mul(Ex *o, const Ex *x, const Ex *y);
     26 bool ex_div(Ex *o, const Ex *x, const Ex *y);
     27 bool ex_neg(Ex *o, const Ex *x);
     28 bool ex_pow_int(Ex *o, const Ex *x, int64_t n);
     29 bool ex_sqrt(Ex *o, const Ex *x);
     30 bool ex_root(Ex *o, const Ex *x, int64_t n);   /* solo si da racional */
     31 Dec  ex_to_dec(const Ex *x);
     32 int  ex_sign(const Ex *x);
     33 
     34 /* trigonometria exacta: angulo en la unidad dada (ver dmath.h) */
     35 bool ex_sin(Ex *o, const Ex *x, int ang);
     36 bool ex_cos(Ex *o, const Ex *x, int ang);
     37 bool ex_tan(Ex *o, const Ex *x, int ang, bool *undef);
     38 bool ex_asin(Ex *o, const Ex *x, int ang);
     39 bool ex_acos(Ex *o, const Ex *x, int ang);
     40 bool ex_atan(Ex *o, const Ex *x, int ang);
     41 
     42 int64_t i64_gcd(int64_t a, int64_t b);
     43 
     44 #endif