diff options
author | mbkma <[email protected]> | 2019-04-23 21:07:07 +0200 |
---|---|---|
committer | raveit65 <[email protected]> | 2019-05-07 21:13:40 +0200 |
commit | 3d27093a45116cc0ecbf1b568b9cc5efed98e2a3 (patch) | |
tree | 0f9be9bc8c240ef8c43976da1e3ded73a74abcb1 /src/mp-equation.c | |
parent | 47c3325358011aba0e1db6d2ee430237d51d13db (diff) | |
download | mate-calc-3d27093a45116cc0ecbf1b568b9cc5efed98e2a3.tar.bz2 mate-calc-3d27093a45116cc0ecbf1b568b9cc5efed98e2a3.tar.xz |
mp-equation: add pre-defined physical constants
This adds some fundamental physical constants:
- Velocity of Light "c₀", 299,792,458 m/s
- Magnetic constant, "μ₀", 1.2566370614×10⁻ N/A²
- Electric constant, "ε₀", 8.85418782×10⁻¹² s⁴A²/m³kg
- Newtonian constant of gravitation, "G", 6.67408×10⁻¹¹ m³/(s²kg)
- Planck constant, "h", 6.62607004×10⁻³⁴ m²kg/s
- Elementary charge, "e", 1.6021766208(98)×10⁻¹⁹ C
- Electron mass, "mₑ", 9.10938356×10⁻³¹ kg
- Proton mass, "mₚ", 1.672621898(21)×10⁻²⁷ kg
- Avogrado constant, "Nₐ", 6.02214086×10²³ mol⁻¹
They are taken from https://en.wikipedia.org/wiki/Physical_constant#Universal_constants
To insert them one would enter the corresponding symbol or use the gui.
They are set to a MPNumber from string.
Diffstat (limited to 'src/mp-equation.c')
-rw-r--r-- | src/mp-equation.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/mp-equation.c b/src/mp-equation.c index b80408e..fd3ea5a 100644 --- a/src/mp-equation.c +++ b/src/mp-equation.c @@ -18,7 +18,19 @@ static int variable_is_defined(ParserState *state, const char *name) { /* FIXME: Make more generic */ - if (strcmp(name, "e") == 0 || strcmp(name, "i") == 0 || strcmp(name, "π") == 0 || strcmp(name, "pi") == 0) + if (strcmp(name, "e") == 0 || + strcmp(name, "i") == 0 || + strcmp(name, "π") == 0 || + strcmp(name, "pi") == 0 || + strcmp(name, "c₀") == 0 || + strcmp(name, "μ₀") == 0 || + strcmp(name, "ε₀") == 0 || + strcmp(name, "G") == 0 || + strcmp(name, "h") == 0 || + strcmp(name, "e") == 0 || + strcmp(name, "mₑ") == 0 || + strcmp(name, "mₚ") == 0 || + strcmp(name, "Nₐ") == 0) return 1; if (state->options->variable_is_defined) return state->options->variable_is_defined(name, state->options->callback_data); @@ -37,6 +49,24 @@ get_variable(ParserState *state, const char *name, MPNumber *z) mp_get_i(z); else if (strcmp(name, "π") == 0 || strcmp(name, "pi") == 0) mp_get_pi(z); + else if (strcmp(name, "c₀") == 0) + mp_set_from_string("299792458", 10, z); /* velocity of light */ + else if (strcmp(name, "μ₀") == 0) + mp_set_from_string("0.0000012566370614", 10, z); /* magnetic constant */ + else if (strcmp(name, "ε₀") == 0) + mp_set_from_string("0.000000000008854187817", 10, z); /* electric constant */ + else if (strcmp(name, "G") == 0) + mp_set_from_string("0.0000000000667310", 10, z); /* Newtonian constant of gravitation */ + else if (strcmp(name, "h") == 0) + mp_set_from_string("0.000000000000000000000000000000000662606876", 10, z); /* Planck constant */ + else if (strcmp(name, "e") == 0) + mp_set_from_string("0.0000000000000000001602176462", 10, z); /* elementary charge */ + else if (strcmp(name, "mₑ") == 0) + mp_set_from_string("0.000000000000000000000000000000910938188", 10, z); /* electron mass */ + else if (strcmp(name, "mₚ") == 0) + mp_set_from_string("0.00000000000000000000000000167262158", 10, z); /* proton mass */ + else if (strcmp(name, "Nₐ") == 0) + mp_set_from_string("602214199000000000000000", 10, z); /* Avogrado constant */ else if (state->options->get_variable) result = state->options->get_variable(name, z, state->options->callback_data); else @@ -49,7 +79,19 @@ static void set_variable(ParserState *state, const char *name, const MPNumber *x) { // Reserved words, e, π, mod, and, or, xor, not, abs, log, ln, sqrt, int, frac, sin, cos, ... - if (strcmp(name, "e") == 0 || strcmp(name, "i") == 0 || strcmp(name, "π") == 0 || strcmp(name, "pi") == 0) + if (strcmp(name, "e") == 0 || + strcmp(name, "i") == 0 || + strcmp(name, "π") == 0 || + strcmp(name, "pi") == 0 || + strcmp(name, "c₀") == 0 || + strcmp(name, "μ₀") == 0 || + strcmp(name, "ε₀") == 0 || + strcmp(name, "G") == 0 || + strcmp(name, "h") == 0 || + strcmp(name, "e") == 0 || + strcmp(name, "mₑ") == 0 || + strcmp(name, "mₚ") == 0 || + strcmp(name, "Nₐ") == 0) return; // FALSE if (state->options->set_variable) |