| 507 | } |
| 508 | |
| 509 | double mr(const std::string_view& variable, const std::weak_ptr<Payload> payload) { |
| 510 | const auto p = std::dynamic_pointer_cast<PayloadExpressionParser>(payload.lock()); |
| 511 | if (!p) { |
| 512 | assert(p); // Debug build |
| 513 | return NAN; |
| 514 | } |
| 515 | return fabs(cell(p->row + 1, variable, payload) - cell(p->row + 1 - 1, variable, payload)); |
| 516 | } |
| 517 | |
| 518 | double smmin(double x, const std::string_view& variable, const std::weak_ptr<Payload> payload) { |
| 519 | const auto p = std::dynamic_pointer_cast<PayloadExpressionParser>(payload.lock()); |