Steppable 0.0.1
A CAS project written from scratch in C++
Loading...
Searching...
No Matches
calc.hpp
1/**************************************************************************************************
2 * Copyright (c) 2023-2025 NWSOFT *
3 * *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy *
5 * of this software and associated documentation files (the "Software"), to deal *
6 * in the Software without restriction, including without limitation the rights *
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell *
8 * copies of the Software, and to permit persons to whom the Software is *
9 * furnished to do so, subject to the following conditions: *
10 * *
11 * The above copyright notice and this permission notice shall be included in all *
12 * copies or substantial portions of the Software. *
13 * *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE *
20 * SOFTWARE. *
21 **************************************************************************************************/
22
35
36#pragma once
37
38#include "fn/root.hpp"
39#include "output.hpp"
40
41#include <string>
42#include <util.hpp>
43
44using namespace std::literals;
45
51{
56 {
57 std::string quotient;
58 std::string remainder;
59 };
60
68 std::string abs(const std::string& _number, int steps);
69
81 std::string add(const std::string& a,
82 const std::string& b,
83 int steps = 2,
84 bool negative = false,
85 bool properlyFormat = true);
86
98 std::string compare(const std::string& _a, const std::string& _b, int steps = 2);
99
108 std::string decimalConvert(const std::string& _inputString, const std::string& baseString, int steps = 2);
109
118 std::string baseConvert(const std::string& _number, const std::string& baseStr, int steps = 2);
119
129 std::string divide(const std::string& number, const std::string& divisor, int steps = 2, int decimals = 5);
130
138 QuotientRemainder divideWithQuotient(const std::string& number, const std::string& divisor);
139
148 std::string getGCD(const std::string& _a, const std::string& _b);
149
158 std::string multiply(const std::string& a, const std::string& b, int steps = 2, int decimals = MAX_DECIMALS);
159
169 std::string power(const std::string& _number, const std::string& raiseTo, int steps = 2, int decimals = 8);
170
178 std::string exp(const std::string& x, size_t decimals = 10);
179
189 std::string subtract(const std::string& a, const std::string& b, int steps = 2, bool noMinus = false);
190
201 std::string root(const std::string& _number, const std::string& base, size_t decimals = 8, int steps = 0);
202
210 Surd rootSurd(const std::string& _number, const std::string& base);
211
220 std::string rootIntPart(const std::string& _number, const std::string& base);
221
230 std::string factorial(const std::string& _number, int steps = 2);
231
238 std::string degToRad(const std::string& _deg);
239
246 std::string gradToRad(const std::string& _grad);
247
257 std::string cos(const std::string& x, int decimals, int mode = 0);
258
268 std::string sin(const std::string& x, int decimals, int mode = 0);
269
279 std::string tan(const std::string& x, int decimals, int mode = 0);
280
290 std::string sec(const std::string& x, int decimals, int mode = 0);
291
301 std::string csc(const std::string& x, int decimals, int mode = 0);
302
312 std::string cot(const std::string& x, int decimals, int mode = 0);
313
323 std::string acos(const std::string& x, int decimals, int mode = 0);
324
334 std::string asin(const std::string& x, int decimals, int mode = 0);
335
345 std::string atan(const std::string& x, int decimals, int mode = 0);
346
356 std::string asec(const std::string& x, int decimals, int mode = 0);
357
367 std::string acsc(const std::string& x, int decimals, int mode = 0);
368
378 std::string acot(const std::string& x, int decimals, int mode = 0);
379
388 std::string sinh(const std::string& x, int decimals);
389
398 std::string cosh(const std::string& x, int decimals);
399
408 std::string tanh(const std::string& x, int decimals);
409
418 std::string sech(const std::string& x, int decimals);
419
428 std::string csch(const std::string& x, int decimals);
429
438 std::string coth(const std::string& x, int decimals);
439
448 std::string asinh(const std::string& x, int decimals);
449
458 std::string acosh(const std::string& x, int decimals);
459
468 std::string atanh(const std::string& x, int decimals);
469
478 std::string acoth(const std::string& x, int decimals);
479
488 std::string asech(const std::string& x, int decimals);
489
498 std::string acsch(const std::string& x, int decimals);
499
508 std::string logb(const std::string& _number, const std::string& _base, size_t _decimals);
509
519 std::string log10(const std::string& _number, size_t _decimals);
520
530 std::string log2(const std::string& _number, size_t _decimals);
531
541 std::string ln(const std::string& _number, size_t _decimals);
542
549 template<typename Pred>
550 void loop(const std::string& times, Pred predicate)
551 {
552 // We're done already!
553 if (times == "0")
554 return;
555 if (times == "1")
556 return predicate("1");
557
558 std::string current = "0";
559 auto result = compare(current, times, 0);
560
561 while (result == "0")
562 {
563 try
564 {
565 predicate(current);
566 }
567 catch (std::exception& e)
568 {
569 output::error("loop", "Exception occurred in predicate."s);
570 output::error("loop", "Exception message: {0}"s, { e.what() });
571 }
572 current = add(current, "1", 0);
573 result = compare(current, times, 0);
574 }
575 }
576
577} // namespace steppable::__internals::calc
Definition baseConvert.cpp:66
std::string degToRad(const std::string &_deg)
Converts degrees to radians.
Definition trig.cpp:52
std::string log10(const std::string &_number, const size_t _decimals)
Calculates the common logarithm of a number.
Definition log.cpp:125
std::string factorial(const std::string &_number, const int steps)
Calculates the factorial of a number.
Definition factorial.cpp:51
std::string subtract(const std::string &a, const std::string &b, const int steps, const bool noMinus)
Subtracts one string representation of a number from another string representation of a number.
Definition subtract.cpp:52
std::string coth(const std::string &x, const int decimals)
Hyperbolic tangent function.
Definition hyp.cpp:90
std::string rootIntPart(const std::string &_number, const std::string &base)
Gets the integer part of the root of a number.
Definition root.cpp:92
std::string acot(const std::string &x, const int decimals, const int mode)
Calculates the arc cotangent of a number.
Definition trig.cpp:465
void loop(const std::string &times, Pred predicate)
Executes a given predicate function a specified number of times.
Definition calc.hpp:550
std::string compare(const std::string &_a, const std::string &_b, const int steps)
Compares two string representations of numbers.
Definition comparison.cpp:47
std::string gradToRad(const std::string &_grad)
Converts gradians to radians.
Definition trig.cpp:60
std::string multiply(const std::string &_a, const std::string &_b, const int steps, const int decimals)
Multiplies two string representations of numbers.
Definition multiply.cpp:51
std::string sech(const std::string &x, const int decimals)
Hyperbolic tangent function.
Definition hyp.cpp:118
std::string cosh(const std::string &x, const int decimals)
Hyperbolic cosine function.
Definition hyp.cpp:66
std::string power(const std::string &_number, const std::string &_raiseTo, const int steps, const int decimals)
Raises a string representation of a number to a power.
Definition power.cpp:62
std::string csch(const std::string &x, const int decimals)
Hyperbolic tangent function.
Definition hyp.cpp:104
std::string ln(const std::string &_number, const size_t _decimals)
Calculates the natural logarithm of a number.
Definition log.cpp:137
std::string sinh(const std::string &x, const int decimals)
Hyperbolic sine function.
Definition hyp.cpp:52
std::string sin(const std::string &x, const int decimals, const int mode)
Calculates the sine of a number.
Definition trig.cpp:176
std::string cos(const std::string &x, const int decimals, const int mode)
Calculates the cosine of a number.
Definition trig.cpp:140
std::string divide(const std::string &_number, const std::string &_divisor, const int steps, const int _decimals)
Divides a string representation of a number by another string representation of a number.
Definition division.cpp:117
std::string logb(const std::string &_number, const std::string &_base, const size_t _decimals)
Calculates the logarithm with a given base.
Definition log.cpp:107
std::string tan(const std::string &x, const int decimals, const int mode)
Calculates the tangent of a number.
Definition trig.cpp:215
std::string acosh(const std::string &x, const int decimals)
Inverse hyperbolic cosine function.
Definition hyp.cpp:147
QuotientRemainder divideWithQuotient(const std::string &number, const std::string &divisor)
Definition division.cpp:272
std::string csc(const std::string &x, const int decimals, const int mode)
Calculates the cosecant of a number.
Definition trig.cpp:271
std::string add(const std::string &a, const std::string &b, const int steps, const bool negative, const bool properlyFormat)
Adds two string representations of numbers, and performs with the column method.
Definition add.cpp:50
std::string log2(const std::string &_number, const size_t _decimals)
Calculates the binary logarithm of a number.
Definition log.cpp:131
std::string getGCD(const std::string &_a, const std::string &_b)
Gets the greatest common divisor of two string representations of numbers.
Definition division.cpp:284
std::string decimalConvert(const std::string &_inputString, const std::string &baseString, int steps)
Converts a string representation of a number from any base to decimal.
Definition decimalConvert.cpp:67
std::string baseConvert(const std::string &_number, const std::string &baseStr, const int steps)
Converts a string representation of a number from decimal to another one.
Definition baseConvert.cpp:87
std::string acoth(const std::string &x, const int decimals)
Inverse hyperbolic cotangent function.
Definition hyp.cpp:177
std::string atan(const std::string &_x, const int decimals, const int mode)
Calculates the arc tangent of a number.
Definition trig.cpp:310
std::string asec(const std::string &x, const int decimals, const int mode)
Calculates the arc secant of a number.
Definition trig.cpp:433
Surd rootSurd(const std::string &_number, const std::string &base)
Converts a root operation into a surd.
Definition root.cpp:119
std::string acsch(const std::string &x, const int decimals)
Inverse hyperbolic cosecant function.
Definition hyp.cpp:192
std::string cot(const std::string &x, const int decimals, const int mode)
Calculates the cotangent of a number.
Definition trig.cpp:297
std::string tanh(const std::string &x, const int decimals)
Hyperbolic tangent function.
Definition hyp.cpp:80
std::string atanh(const std::string &x, const int decimals)
Inverse hyperbolic tangent function.
Definition hyp.cpp:162
std::string root(const std::string &_number, const std::string &base, const size_t _decimals, const int steps)
Takes the n-th root of a numer.
Definition root.cpp:189
std::string asin(const std::string &x, const int decimals, const int mode)
Calculates the arc sine of a number.
Definition trig.cpp:365
std::string acos(const std::string &x, const int decimals, const int mode)
Calculates the arc cosine of a number.
Definition trig.cpp:407
std::string asech(const std::string &x, const int decimals)
Inverse hyperbolic secant function.
Definition hyp.cpp:212
std::string abs(const std::string &_number, const int steps)
Calculates the absolute value of a string representation of a number.
Definition abs.cpp:56
std::string acsc(const std::string &x, const int decimals, const int mode)
Calculates the arc cosecant of a number.
Definition trig.cpp:449
std::string exp(const std::string &x, const size_t decimals)
Calculates e^x. Shorthand of power(x, E, 0);.
Definition power.cpp:121
std::string sec(const std::string &x, const int decimals, const int mode)
Calculates the secant of a number.
Definition trig.cpp:284
std::string asinh(const std::string &x, const int decimals)
Inverse hyperbolic sine function.
Definition hyp.cpp:132
void error(const std::string &name, const std::basic_string< T > &msg, const std::vector< std::string > &args={})
Prints an error message.
Definition output.hpp:80
Represents the quotient and remainder of a division operation.
Definition calc.hpp:56
std::string quotient
Definition calc.hpp:57
std::string remainder
Definition calc.hpp:58
A struct to represent a surd. A surd is a number that cannot be simplified to remove a square root....
Definition root.hpp:34
Untitled