mardi 15 octobre 2019

c++, problems with cin?

I wrote a small test to figure out the fastest mathematic operation for a special x. I wanted the x to be entered by the user, so that I can run the tests for different x. In the following code I tells me that there is an error with std::cin >> val; error: cannot bind 'std::istream {aka std::basic_istream}' lvalue to 'std::basic_istream&&'

If I declare val as double valinstead of const double val I get more errors. What can I change in order to have a running programm?

#include <cmath>
#include <chrono>
#include <iomanip>
#include <iostream>
#include <istream>
#include <ostream>
// for x^1.5 
double test_pow_15(double x) { return std::pow(x, 1.5); };
double test_chain_15(double x) { return sqrt(x * x * x); };
double test_tmp_15(double x) { double tmp = x * x * x; return sqrt(tmp); };


volatile double sink;
const double val = 0;
const double ans_15 = std::pow(val, 1.5);

void do_test(const char* name, double(&fn)(double), const double ans) {
    auto start = std::chrono::high_resolution_clock::now();
    for (size_t n = 0; n < 1000 * 1000 * 10; ++n) {
        sink = val;
        sink = fn(sink);
    }
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double, std::milli> dur = end - start;
    std::cout << name << ".Took" << dur.count() << "ms, error:" << sink - ans << '\n';
}

int main()
{
    std::cout << "Speed test"<< '\n';
    std::cout << "Please enter value for x."<< '\n';
    std::cout << "x = ";
    std::cin >> val;

    std::cout << "Speed test starts for x = "<< val <<"."<<'\n';
    std::cout << " " << '\n';
    std::cout << "For " << val<<"^(1.5) the speed is:" <<'\n';
    do_test("std::pow(x,1.5)                                  ",test_pow_15, ans_15);
    do_test("sqrt(x*x*x)                                      ",test_chain_15, ans_15);
    do_test("tmp = x*x*x; sqrt(tmp)                           ",test_tmp_15, ans_15);

    return 0;
}

Aucun commentaire:

Enregistrer un commentaire