Value* SqrtFunction::evaluate(Context* ctx) { NumberValue* numVal=dynamic_cast<NumberValue*>(getParameterArgument(ctx,0)); if(numVal) { decimal num=numVal->getNumber(); return new NumberValue(r_sqrt(num)); } return Value::undefined(); }
Value* ComplexValue::operation(Expression::Operator_e e) { if(e==Expression::Length) { //l = sqrt(w^2+x^2+y^2,z^2) Value* n=Value::operation(real,Expression::Multiply,real); for(Value* i: imaginary) { Value* r=Value::operation(i,Expression::Multiply,i); n=Value::operation(n,Expression::Add,r); } auto* l=dynamic_cast<NumberValue*>(n); if(l) return new NumberValue(r_sqrt(l->getNumber())); return Value::undefined(); } return this; }