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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
// Copyright John Maddock 2008.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include "mp_t.hpp"
#include <boost/math/constants/constants.hpp>
#include <fstream>
#include <boost/math/tools/test_data.hpp>
using namespace boost::math::tools;
using namespace std;
struct asinh_data_generator
{
mp_t operator()(mp_t z)
{
std::cout << z << " ";
mp_t result = log(z + sqrt(z * z + 1));
std::cout << result << std::endl;
return result;
}
};
struct acosh_data_generator
{
mp_t operator()(mp_t z)
{
std::cout << z << " ";
mp_t result = log(z + sqrt(z * z - 1));
std::cout << result << std::endl;
return result;
}
};
struct atanh_data_generator
{
mp_t operator()(mp_t z)
{
std::cout << z << " ";
mp_t result = log((z + 1) / (1 - z)) / 2;
std::cout << result << std::endl;
return result;
}
};
int main(int argc, char*argv [])
{
parameter_info<mp_t> arg1;
test_data<mp_t> data;
std::ofstream ofs;
bool cont;
std::string line;
std::cout << "Welcome.\n"
"This program will generate spot tests for the inverse hyperbolic sin function:\n";
do{
if(0 == get_user_parameter_info(arg1, "z"))
return 1;
data.insert(asinh_data_generator(), arg1);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
std::cout << "Enter name of test data file [default=asinh_data.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "asinh_data.ipp";
ofs.open(line.c_str());
ofs << std::scientific << std::setprecision(40);
write_code(ofs, data, "asinh_data");
data.clear();
std::cout << "Welcome.\n"
"This program will generate spot tests for the inverse hyperbolic cos function:\n";
do{
if(0 == get_user_parameter_info(arg1, "z"))
return 1;
data.insert(acosh_data_generator(), arg1);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
std::cout << "Enter name of test data file [default=acosh_data.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "acosh_data.ipp";
ofs.close();
ofs.open(line.c_str());
ofs << std::scientific << std::setprecision(40);
write_code(ofs, data, "acosh_data");
data.clear();
std::cout << "Welcome.\n"
"This program will generate spot tests for the inverse hyperbolic tan function:\n";
do{
if(0 == get_user_parameter_info(arg1, "z"))
return 1;
data.insert(atanh_data_generator(), arg1);
std::cout << "Any more data [y/n]?";
std::getline(std::cin, line);
boost::algorithm::trim(line);
cont = (line == "y");
}while(cont);
std::cout << "Enter name of test data file [default=atanh_data.ipp]";
std::getline(std::cin, line);
boost::algorithm::trim(line);
if(line == "")
line = "atanh_data.ipp";
ofs.close();
ofs.open(line.c_str());
ofs << std::scientific << std::setprecision(40);
write_code(ofs, data, "atanh_data");
return 0;
}
|