Ticket #11102: test.cpp

File test.cpp, 1.2 KB (added by Tobias Beck <Tobias.Beck@…>, 8 years ago)

test case to reproduce the problem

Line 
1/*
2 Compiled with:
3 > gcc -I<BOOST_HOME>/include -c -g -o test.o test.cpp
4 > gcc -o test test.o -lgmp -lstdc++
5
6 Output:
7 > ./test
8 Input: 0.840188, 0.394383, 0.783099
9 Output A: 0
10 Input: 0.79844, 0.911647, 0.197551
11 Output B: 1.25764e-58
12*/
13
14#include <iostream>
15#include <cstdlib>
16#include <boost/multiprecision/gmp.hpp>
17
18namespace b_mp = boost::multiprecision;
19typedef b_mp::number<b_mp::gmp_float<0>, b_mp::et_off> test_float_type;
20
21// get random value between 0 and 1
22void set_rand(test_float_type* v, bool with_division) {
23 for (int i = 0; i < 3; i++) {
24 v[i] = with_division ?
25 test_float_type(double(std::rand()) / double(RAND_MAX)) :
26 test_float_type(std::rand()) / test_float_type(RAND_MAX);
27 }
28}
29
30// test distributive property
31int main() {
32 test_float_type v[3], a1, a2;
33
34 set_rand(v, true);
35 std::cerr << "Input: " << v[0] << ", " << v[1] << ", " << v[2] << std::endl;
36 a1 = v[0] * v[1] + v[0] * v[2];
37 a2 = v[0] * (v[1] + v[2]);
38 std::cerr << "Output A: " << a1 - a2 << std::endl;
39
40 set_rand(v, false);
41 std::cerr << "Input: " << v[0] << ", " << v[1] << ", " << v[2] << std::endl;
42 a1 = v[0] * v[1] + v[0] * v[2];
43 a2 = v[0] * (v[1] + v[2]);
44 std::cerr << "Output B: " << a1 - a2 << std::endl;
45
46 return 0;
47}