mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-30 04:33:55 -06:00
83d14e1c1c
It is split into - /libgnucash (for the non-gui bits) - /gnucash (for the gui) - /common (misc source files used by both) - /bindings (currently only holds python bindings) This is the first step in restructuring the code. It will need much more fine tuning later on.
49 lines
1.3 KiB
Plaintext
49 lines
1.3 KiB
Plaintext
/** \page gncnumericexample gnc_numeric Example
|
|
|
|
\section example EXAMPLE
|
|
|
|
The following program finds the best ::gnc_numeric approximation to
|
|
the \a math.h constant \a M_PI given a maximum denominator. For
|
|
large denominators, the ::gnc_numeric approximation is accurate to
|
|
more decimal places than will generally be needed, but in some cases
|
|
this may not be good enough. For example,
|
|
|
|
@verbatim
|
|
M_PI = 3.14159265358979323846
|
|
245850922 / 78256779 = 3.14159265358979311599 (16 sig figs)
|
|
3126535 / 995207 = 3.14159265358865047446 (12 sig figs)
|
|
355 / 113 = 3.14159292035398252096 (7 sig figs)
|
|
@endverbatim
|
|
|
|
@verbatim
|
|
#include <glib.h>
|
|
#include <qof.h>
|
|
#include <math.h>
|
|
|
|
int
|
|
main(int argc, char ** argv)
|
|
{
|
|
gnc_numeric approx, best;
|
|
double err, best_err=1.0;
|
|
double m_pi = M_PI;
|
|
gint64 denom;
|
|
gint64 max;
|
|
|
|
sscanf(argv[1], "%Ld", &max);
|
|
|
|
for (denom = 1; denom < max; denom++)
|
|
{
|
|
approx = double_to_gnc_numeric (m_pi, denom, GNC_RND_ROUND);
|
|
err = m_pi - gnc_numeric_to_double (approx);
|
|
if (fabs (err) < fabs (best_err))
|
|
{
|
|
best = approx;
|
|
best_err = err;
|
|
printf ("%Ld / %Ld = %.30f\n", gnc_numeric_num (best),
|
|
gnc_numeric_denom (best), gnc_numeric_to_double (best));
|
|
}
|
|
}
|
|
}
|
|
@endverbatim
|
|
*/
|