#include #include #include 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 const &args) const { for (unsigned int i = 0; i < args.size(); ++i) { if (!args[i]->isDiscreteValued()) return false; } return true; }