Skip to main content
Glama
calculator.cpp3.11 kB
/** * @file calculator.cpp * @brief Implementation of the Calculator class */ #include "calculator.h" #include <stdexcept> #include <sstream> #include <iomanip> #include <cmath> #include <chrono> #include <ctime> namespace MathUtils { Calculator::Calculator() : lastResult(0.0) { // Initialize with welcome message in history history.push_back("Calculator initialized"); } Calculator::~Calculator() { // Cleanup if needed } double Calculator::add(double a, double b) { lastResult = a + b; std::ostringstream oss; oss << formatNumber(a) << " + " << formatNumber(b) << " = " << formatNumber(lastResult); history.push_back(oss.str()); return lastResult; } double Calculator::subtract(double a, double b) { lastResult = a - b; std::ostringstream oss; oss << formatNumber(a) << " - " << formatNumber(b) << " = " << formatNumber(lastResult); history.push_back(oss.str()); return lastResult; } double Calculator::multiply(double a, double b) { lastResult = a * b; std::ostringstream oss; oss << formatNumber(a) << " * " << formatNumber(b) << " = " << formatNumber(lastResult); history.push_back(oss.str()); return lastResult; } double Calculator::divide(double a, double b) { if (std::abs(b) < 1e-10) { throw std::invalid_argument("Division by zero is not allowed"); } lastResult = a / b; std::ostringstream oss; oss << formatNumber(a) << " / " << formatNumber(b) << " = " << formatNumber(lastResult); history.push_back(oss.str()); return lastResult; } double Calculator::getLastResult() const { return lastResult; } const std::vector<std::string>& Calculator::getHistory() const { return history; } void Calculator::clearHistory() { history.clear(); lastResult = 0.0; history.push_back("History cleared"); } double Calculator::power(double base, double exponent) { lastResult = std::pow(base, exponent); std::ostringstream oss; oss << formatNumber(base) << " ^ " << formatNumber(exponent) << " = " << formatNumber(lastResult); history.push_back(oss.str()); return lastResult; } double Calculator::sqrt(double number) { if (number < 0) { throw std::invalid_argument("Square root of negative number is not allowed"); } lastResult = std::sqrt(number); std::ostringstream oss; oss << "sqrt(" << formatNumber(number) << ") = " << formatNumber(lastResult); history.push_back(oss.str()); return lastResult; } std::string formatNumber(double number, int precision) { std::ostringstream oss; oss << std::fixed << std::setprecision(precision) << number; return oss.str(); } } // namespace MathUtils

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Positronikal/doxygen-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server