|
|
@ -37,22 +37,20 @@ namespace storm { |
|
|
|
STORM_LOG_DEBUG("Expecting the denominator to be constant"); |
|
|
|
} |
|
|
|
|
|
|
|
storm::expressions::Expression denominatorVal = manager->rational(std::stod(storm::utility::to_string(denominator.constantPart()))); |
|
|
|
storm::expressions::Expression denominatorVal = manager->rational(storm::utility::convertNumber<storm::RationalNumber, storm::RationalFunctionCoefficient>(denominator.constantPart())); |
|
|
|
storm::expressions::Expression result; |
|
|
|
if (function.isConstant()) { |
|
|
|
result = manager->integer(std::stoi(storm::utility::to_string(function.constantPart()))); |
|
|
|
result = manager->rational(storm::utility::convertNumber<storm::RationalNumber, storm::RationalFunctionCoefficient>(function.constantPart())); |
|
|
|
} else { |
|
|
|
auto nominator = function.nominatorAsPolynomial().polynomialWithCoefficient(); |
|
|
|
result = manager->integer(std::stoi(storm::utility::to_string(nominator.constantPart()))); |
|
|
|
result = manager->rational(storm::utility::convertNumber<storm::RationalNumber, storm::RationalFunctionCoefficient>(nominator.constantPart())); |
|
|
|
for (auto itr = nominator.begin(); itr != nominator.end(); ++itr) { |
|
|
|
varsFunction.clear(); |
|
|
|
(*itr).gatherVariables(varsFunction); |
|
|
|
itr->gatherVariables(varsFunction); |
|
|
|
|
|
|
|
// TODO: improve transformation from coefficient to expression
|
|
|
|
storm::expressions::Expression nominatorPartExpr = manager->integer( |
|
|
|
std::stoi(storm::utility::to_string((*itr).coeff()))); |
|
|
|
storm::expressions::Expression nominatorPartExpr = manager->rational(storm::utility::convertNumber<storm::RationalNumber, storm::RationalFunctionCoefficient>(itr->coeff())); |
|
|
|
for (auto var : varsFunction) { |
|
|
|
nominatorPartExpr = nominatorPartExpr * (manager->getVariable(var.name())^manager->integer((*itr).monomial()->exponentOfVariable(var))); |
|
|
|
nominatorPartExpr = nominatorPartExpr * (manager->getVariable(var.name())^manager->rational(storm::utility::convertNumber<storm::RationalNumber, storm::RationalFunctionCoefficient>(itr->monomial()->exponentOfVariable(var)))); |
|
|
|
} |
|
|
|
if (varsFunction.size() >= 1) { |
|
|
|
result = result + nominatorPartExpr; |
|
|
@ -62,6 +60,7 @@ namespace storm { |
|
|
|
result = result / denominatorVal; |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
template class RationalFunctionToExpression<storm::RationalFunction>; |
|
|
|
} |
|
|
|
} |