コード例 #1
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeExponentialDblDbl(Executer &executer)
{
    auto y = executer.topDbl();
    executer.pop();
    auto x = executer.topDbl();
    calculatePowerDblDbl(executer, x, y);
}
コード例 #2
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeSubtractDblDbl(Executer &executer)
{
    auto rhs = executer.topDbl();
    executer.pop();
    auto result = executer.topDbl() - rhs;
    checkDoubleOverflow(executer, result);
    executer.setTop(result);
}
コード例 #3
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeDivideDblInt(Executer &executer)
{
    auto rhs = static_cast<double>(popIntegerDivisor(executer));
    auto lhs = executer.topDbl();
    auto result = lhs / rhs;
    executer.setTop(result);
}
コード例 #4
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
inline double popDoubleDivisor(Executer &executer)
{
    auto rhs = executer.topDbl();
    checkDivideByZero(executer, rhs);
    executer.pop();
    return rhs;
}
コード例 #5
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeMultiplyIntDbl(Executer &executer)
{
    auto rhs = executer.topDbl();
    executer.pop();
    auto lhs = executer.topIntAsDbl();
    multiplyAndCheckResult(executer, lhs, rhs);
}
コード例 #6
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeExponentialDblInt(Executer &executer)
{
    auto y = executer.topInt();
    executer.pop();
    auto x = executer.topDbl();
    executer.setTop(PowerDblInt{executer, x, y}());
}
コード例 #7
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeAbsDbl(Executer &executer)
{
    auto argument = executer.topDbl();
    if (argument < 0) {
        executer.setTop(-argument);
    }
}
コード例 #8
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeIntegerDivide(Executer &executer)
{
    auto rhs = popDoubleDivisor(executer);
    auto lhs = executer.topDbl();
    auto result = lhs / rhs;
    checkIntegerOverflow(executer, result);
    executer.setTopIntFromDouble(result);
}
コード例 #9
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeSqr(Executer &executer)
{
    auto argument = executer.topDbl();
    if (argument < 0) {
        throw RunError {"square root of negative number", executer.currentOffset()};
    }
    executer.setTop(std::sqrt(argument));
}
コード例 #10
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeLog(Executer &executer)
{
    auto argument = executer.topDbl();
    if (argument <= 0) {
        throw RunError {"logarithm of non-positive number", executer.currentOffset()};
    }
    executer.setTop(std::log(argument));
}
コード例 #11
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeSubtractDblInt(Executer &executer)
{
    auto rhs = executer.topIntAsDbl();
    executer.pop();
    executer.setTop(executer.topDbl() - rhs);
}
コード例 #12
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeCvtInt(Executer &executer)
{
    auto operand = std::round(executer.topDbl());
    checkIntegerOverflow(executer, operand);
    executer.setTopIntFromDouble(operand);
}
コード例 #13
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeExp(Executer &executer)
{
    auto result = std::exp(executer.topDbl());
    checkForOverflow(executer, result);
    executer.setTop(result);
}
コード例 #14
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
inline void doDoubleMultiply(Executer &executer, double rhs)
{
    executer.pop();
    auto lhs = executer.topDbl();
    multiplyAndCheckResult(executer, lhs, rhs);
}
コード例 #15
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeAtn(Executer &executer)
{
    executer.setTop(std::atan(executer.topDbl()));
}
コード例 #16
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeCos(Executer &executer)
{
    executer.setTop(std::cos(executer.topDbl()));
}
コード例 #17
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeSin(Executer &executer)
{
    executer.setTop(std::sin(executer.topDbl()));
}
コード例 #18
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeNegateDbl(Executer &executer)
{
    executer.setTop(-executer.topDbl());
}
コード例 #19
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeFrac(Executer &executer)
{
    auto argument = executer.topDbl();
    executer.setTop(argument - std::trunc(argument));
}
コード例 #20
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeDivideDblDbl(Executer &executer)
{
    auto rhs = popDoubleDivisor(executer);
    auto lhs = executer.topDbl();
    divideAndCheckResult(executer, lhs, rhs);
}
コード例 #21
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeInt(Executer &executer)
{
    executer.setTop(std::floor(executer.topDbl()));
}
コード例 #22
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeModuloDblDbl(Executer &executer)
{
    auto rhs = popDoubleDivisor(executer);
    auto lhs = executer.topDbl();
    executer.setTop(std::fmod(lhs, rhs));
}
コード例 #23
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeAddDblInt(Executer &executer)
{
    auto rhs = executer.topIntAsDbl();
    executer.pop();
    executer.setTop(executer.topDbl() + rhs);
}
コード例 #24
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeModuloDblInt(Executer &executer)
{
    auto rhs = static_cast<double>(popIntegerDivisor(executer));
    auto lhs = executer.topDbl();
    executer.setTop(std::fmod(lhs, rhs));
}
コード例 #25
0
ファイル: mathfunctions.cpp プロジェクト: thunder422/ibcx
void executeFix(Executer &executer)
{
    executer.setTop(std::trunc(executer.topDbl()));
}
コード例 #26
0
ファイル: mathoperators.cpp プロジェクト: thunder422/ibcx
void executeMultiplyDblDbl(Executer &executer)
{
    auto rhs = executer.topDbl();
    doDoubleMultiply(executer, rhs);
}