File: bigfloat_tst.cc

package info (click to toggle)
rheolef 7.2-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 88,200 kB
  • sloc: cpp: 110,259; sh: 16,733; makefile: 5,406; python: 1,391; yacc: 218; javascript: 203; xml: 191; awk: 61; sed: 5
file content (91 lines) | stat: -rw-r--r-- 2,755 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
///
/// This file is part of Rheolef.
///
/// Copyright (C) 2000-2009 Pierre Saramito <Pierre.Saramito@imag.fr>
///
/// Rheolef is free software; you can redistribute it and/or modify
/// it under the terms of the GNU General Public License as published by
/// the Free Software Foundation; either version 2 of the License, or
/// (at your option) any later version.
///
/// Rheolef is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
/// GNU General Public License for more details.
///
/// You should have received a copy of the GNU General Public License
/// along with Rheolef; if not, write to the Free Software
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
///
/// =========================================================================
#include "bigfloat.h"
#include <iomanip>
#include <sstream>
#include <string>
using namespace std;
//
// N=digits10 is an argument of the bigfloat type
//
#ifdef DIGITS10
const int N = DIGITS10;
#else
const int N = 40;
#endif

int main(){

    cout << setprecision(N); // digit10 == N;

    bigfloat<N> zero;
    cout << "zero			= " << zero << endl;

    // cstor, math library
    bigfloat<N> sqrt5 = sqrt(bigfloat<N>(5));
    cout << "sqrt(5)			= " << sqrt5 << endl;
    bigfloat<N> sqrt5_0 = sqrt(bigfloat<N>(5.0));
    cout << "sqrt(5.0)		= " << sqrt5_0 << endl;

    // type conv & assignment
    bigfloat<N> y;
    y = "2.236067977499789696409173668731276235440618359612L0";
    cout << "y = string		= " << y << endl;
    y = double(sqrt5);
    cout << "y = double(sqrt(5))	= " << y << endl;
    y = int(sqrt5);
    cout << "y = int(sqrt(5))	= " << y << endl;

    // do not send any warning !!!
    int iy = y;

    // operators
    y = sqrt(bigfloat<N>(5));
    cout << "-y			= " << -y << endl;
    bigfloat<N> z = y+y;
    cout << "z = y+y			= " << z << endl;
    z = z/2;
    cout << "z = z/2			= " << z << endl;

    // computed assignment
    z += y;
    cout << "z += y			= " << z << endl;
    
    // comparator
    cout << "z == y			= " << (z==y) << endl;
    cout << "z != y			= " << (z!=y) << endl;
    
    // to string
    ostringstream os;
    os << setprecision(N) << y;
    string s = os.str();
    cout << "string(y) 		= " << s << endl;

    // math
    bigfloat<N> t = log10(y);
    cout << "t = log10(y)		= " << t << endl;

    cout << "Pi			= " << bigfloat<N>::compute_pi() << endl;
    cout << "digits 			= " << numeric_limits<bigfloat<N> >::digits << endl;
    cout << "digits10 		= " << numeric_limits<bigfloat<N> >::digits10 << endl;
    cout << "epsilon 		= " << numeric_limits<bigfloat<N> >::epsilon() << endl;
}