#include <cstring>
#include <iterator>
#include <sstream>
+
#include "cost_func.h"
-cost_func::cost_func(const char *param)
+cost_func::cost_func(const char* param)
{
int len = strlen(param);
char tmpbuf[len + 1];
- char *tmp = tmpbuf;
+ char* tmp = tmpbuf;
memcpy(tmp, param, len + 1);
degree = std::count(tmp, tmp + len, ',');
factor = new double[degree + 1];
for (int i = degree ; i > 0 ; i--) {
- char *next = strchr(tmp, ',');
+ char* next = strchr(tmp, ',');
*next++ = '\0';
- factor[i] = atof(tmp);
+ std::istringstream(tmp) >> factor[i];
tmp = next;
}
- factor[0] = atof(tmp);
+ std::istringstream(tmp) >> factor[0];
}
cost_func::~cost_func()
double cost_func::operator()(double amount) const
{
- double ret = factor[degree];
+ double result = factor[degree];
for (int i = degree - 1; i >= 0 ; i--)
- ret = amount * ret + factor[i];
- return ret;
+ result = amount * result + factor[i];
+ return result;
}
std::string cost_func::to_string()