Useful for doing things like making alternating bowing patterns.
}
static const char* operator_labels[] = {
- /* no PUSH */ "+", "-", "*", "/", NULL
+ /* no PUSH */ "+", "-", "*", "/", "mod", NULL
};
for (int o = 0; operator_labels[o]; ++o) {
Gtk::TreeModel::Row row = *(operator_list->append());
ADD, ///< Add top two values
SUB, ///< Subtract top from second-top
MULT, ///< Multiply top two values
- DIV ///< Divide second-top by top
+ DIV, ///< Divide second-top by top
+ MOD ///< Modulus (division remainder)
};
Operation(Operator o, const Value& a=Value()) : op(o), arg(a) {}
}
value /= rhs.to_double();
break;
+ case MOD:
+ if (rhs.to_double() == 0.0) {
+ return; // Program will fail safely
+ }
+ value = fmod(value, rhs.to_double());
+ break;
default: break;
}