diff options
author | Ian Jauslin <ian.jauslin@roma1.infn.it> | 2015-06-14 00:52:45 +0000 |
---|---|---|
committer | Ian Jauslin <ian.jauslin@roma1.infn.it> | 2015-06-14 00:52:45 +0000 |
commit | aa0f3ae2988d372b190b9bde2e75a6d17e744e93 (patch) | |
tree | 14482245c2fca27fcdad3078e97d0871352d52a7 /src/rational_float.h |
Initial commitv1.2
Diffstat (limited to 'src/rational_float.h')
-rw-r--r-- | src/rational_float.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/rational_float.h b/src/rational_float.h new file mode 100644 index 0000000..931b5ec --- /dev/null +++ b/src/rational_float.h @@ -0,0 +1,64 @@ +/* +Copyright 2015 Ian Jauslin + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* + Rational numbers + uses long doubles to represent integers (to avoid overflow) +*/ + +#ifdef RATIONAL_AS_FLOAT + +#ifndef RATIONAL_H +#define RATIONAL_H + +#include "types.h" + +// Q from int/int +Q quot(long double p, long double q); + +// add +Q Q_add(Q x1,Q x2); +//multiply +Q Q_prod(Q x1,Q x2); +// inverse +Q Q_inverse(Q x1); +// quotient +Q Q_quot(Q x1, Q x2); + +// compare +int Q_cmp(Q x1, Q x2); + +// simplify +Q Q_simplify(Q x); +//simplify in place +int Q_simplify_inplace(Q* x); + +// greatest common divisor +long double gcd(long double x,long double y); +long double modld(long double x, long double m); +// least common multiple +long double lcm(long double x,long double y); + +// approximate value as double +double Q_double_value(Q q); + +// print to string +int Q_sprint(Q num, Char_Array* out); +// read from a string +int str_to_Q(char* str, Q* num); + +#endif +#endif |