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

num.h (1483B)


      1 /* num.h - el valor de la calculadora: siempre el decimal y, si se puede, la forma
      2  * exacta (fraccion, radical, multiplo de π). */
      3 #ifndef NUM_H
      4 #define NUM_H
      5 #include "dec.h"
      6 #include "exact.h"
      7 
      8 typedef struct {
      9     Dec v;                  /* el decimal (si hay forma exacta, sale de ella) */
     10     Ex x;
     11     uint8_t exact;
     12 } Num;
     13 
     14 Num  num_dec(Dec v);
     15 Num  num_int(int64_t v);
     16 Num  num_ex(const Ex *x);
     17 Num  num_err(void);
     18 /* literal: digitos con '.', y exponente decimal (x10^k); exacto si entra */
     19 Num  num_lit(const char *digits, int exp10);
     20 static inline bool num_bad(const Num *n) { return n->v.err != DE_OK; }
     21 
     22 Num  num_add(Num a, Num b);
     23 Num  num_sub(Num a, Num b);
     24 Num  num_mul(Num a, Num b);
     25 Num  num_div(Num a, Num b);
     26 Num  num_neg(Num a);
     27 Num  num_pow(Num a, Num b);
     28 Num  num_sqrt(Num a);
     29 Num  num_root(Num idx, Num a);
     30 Num  num_abs(Num a);
     31 Num  num_fact(Num a);
     32 Num  num_npr(Num n, Num r);
     33 Num  num_ncr(Num n, Num r);
     34 Num  num_logb(Num b, Num x);
     35 Num  num_log10(Num x);
     36 Num  num_ln(Num x);
     37 Num  num_sin(Num x, int ang);
     38 Num  num_cos(Num x, int ang);
     39 Num  num_tan(Num x, int ang);
     40 Num  num_asin(Num x, int ang);
     41 Num  num_acos(Num x, int ang);
     42 Num  num_atan(Num x, int ang);
     43 Num  num_int_part(Num x);           /* Int: hacia cero */
     44 Num  num_floor(Num x);              /* Intg */
     45 Num  num_gcd(Num a, Num b);
     46 Num  num_lcm(Num a, Num b);
     47 int  num_cmp(Num a, Num b);
     48 /* fuerza decimal (S⇔D, o cuando la forma exacta no se puede mostrar) */
     49 Num  num_to_dec(Num a);
     50 
     51 #endif