Files
Upsilon/poincare/src/trigonometry.cpp
Émilie Feral 47ce822c42 [poincare] Improve Cosine::immediateSimplify
Change-Id: Icc6329625895c9b33cf8342ab4cdea4ee748d5d4
2017-10-13 14:50:32 +02:00

24 lines
956 B
C++

#include <poincare/trigonometry.h>
#include <ion.h>
namespace Poincare {
static_assert('\x89' == Ion::Charset::SmallPi, "Incorrect");
constexpr const char * cheatTable[Trigonometry::k_numberOfEntries][3] = {{"\x89*12^(-1)", "\x89*5*12^(-1)", "6^(1/2)*4^(-1)+2^(1/2)*4^(-1)"}, {"\x89*8^(-1)", "\x89*3*8^(-1)", "(2+2^(1/2))^(1/2)*2^(-1)"}, {"\x89*6^(-1)", "\x89*3^(-1)", "3^(1/2)*2^(-1)"}};
Expression * Trigonometry::table(const Expression * e, Function f, bool inverse) {
int inputIndex = inverse ? 2 : (int)f;
int outputIndex = inverse ? (int)f : 2;
for (int i = 0; i < k_numberOfEntries; i++) {
Expression * input = Expression::parse(cheatTable[i][inputIndex]);
input->simplify(); // input expression does not change, no root needed and we can use entry after
if (input->compareTo(e) == 0) {
Expression * output = Expression::parse(cheatTable[i][outputIndex]);
return output->simplify();
}
}
return nullptr;
}
}