#include <config.h>
#include <functions/Multiply.h>
#include <sarray/SArray.h>
using std::vector;
Multiply::Multiply ()
: ScalarFunc ("*", 0)
{
}
double
Multiply::eval (vector < SArray const *>const &args) const
{
double val = *args[0]->value();
/* We adopt the convention that any argument multiplied by zero
is zero. This is required to do calculations like x*log(x)
when x is zero.
*/
if (val == 0) {
return 0;
}
for (unsigned int i = 1; i < args.size(); ++i) {
double vali = *args[i]->value();
if (vali == 0) {
return 0;
}
val *= vali;
}
return val;
}
bool Multiply::isDiscreteValued(vector<SArray const *> const &args) const
{
for (unsigned int i = 0; i < args.size(); ++i) {
if (!args[i]->isDiscreteValued())
return false;
}
return true;
}
syntax highlighted by Code2HTML, v. 0.9.1