@ -113,7 +113,6 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Create a solver that we will use throughout the procedure. We will modify the matrix in each iteration.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            auto  solver  =  linearEquationSolverFactory - > create ( std : : move ( submatrix ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            setPrecisionRelativeOfLinearEquationSolver ( solver ,  this - > getPrecision ( ) ,  this - > getRelative ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( this - > lowerBound )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                solver - > setLowerBound ( this - > lowerBound . get ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -244,31 +243,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                submatrixSolver - > setCachingEnabled ( true ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( this - > lowerBound )  {  submatrixSolver - > setLowerBound ( this - > lowerBound . get ( ) ) ;  }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( this - > upperBound )  {  submatrixSolver - > setUpperBound ( this - > upperBound . get ( ) ) ;  }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                ValueType  linEqPrecision  =  this - > getPrecision ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // Temporarily shrink the auxiliary row vector
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auxiliaryRowVector - > resize ( A . getRowGroupCount ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auxiliaryRowVector - > reserve ( A . getRowCount ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                uint_fast64_t  hintIterations  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                bool  vectorsNotEqual  =  false ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                do  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    vectorsNotEqual  =  false ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    setPrecisionRelativeOfLinearEquationSolver ( submatrixSolver ,  linEqPrecision ,  this - > getRelative ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    submatrixSolver - > solveEquations ( x ,  * auxiliaryRowGroupVector ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    submatrixSolver - > multiply ( x ,  nullptr ,  * auxiliaryRowVector ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    linEqPrecision  * =  storm : : utility : : convertNumber < ValueType > ( 0.5 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    + + hintIterations ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    auto  otherTmpResIt  =  auxiliaryRowVector - > begin ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    auto  xIt  =  x . begin ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    for ( auto  tmpResIt  =  auxiliaryRowGroupVector - > begin ( ) ;  tmpResIt  ! =  auxiliaryRowGroupVector - > end ( ) ;  + + tmpResIt )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        if  ( ! storm : : utility : : vector : : equalModuloPrecision ( * tmpResIt  +  * xIt ,  * otherTmpResIt  +  * xIt ,  this - > getPrecision ( ) ,  this - > getRelative ( ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            vectorsNotEqual  =  true ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        + + otherTmpResIt ;  + + xIt ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  while  ( vectorsNotEqual ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                STORM_LOG_WARN_COND ( hintIterations  = =  1 ,  " required  "  < <  hintIterations  < <  "  linear equation solver invokations to apply the scheduler hint " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auxiliaryRowVector - > resize ( A . getRowCount ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                submatrixSolver - > solveEquations ( x ,  * auxiliaryRowGroupVector ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					             
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : vector < ValueType > *  newX  =  auxiliaryRowGroupVector . get ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -377,38 +352,6 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  ValueType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        void   StandardMinMaxLinearEquationSolver < ValueType > : : setPrecisionRelativeOfLinearEquationSolver ( std : : unique_ptr < storm : : solver : : LinearEquationSolver < ValueType > > &  linEqSolver ,  ValueType  precision ,  bool  relative )  const  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            auto *  gmmSolver  =  dynamic_cast < storm : : solver : : GmmxxLinearEquationSolver < ValueType > * > ( linEqSolver . get ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            auto *  nativeSolver  =  dynamic_cast < storm : : solver : : NativeLinearEquationSolver < ValueType > * > ( linEqSolver . get ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            auto *  eigenSolver  =  dynamic_cast < storm : : solver : : EigenLinearEquationSolver < ValueType > * > ( linEqSolver . get ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            auto *  eliminationSolver  =  dynamic_cast < storm : : solver : : EliminationLinearEquationSolver < ValueType > * > ( linEqSolver . get ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( gmmSolver )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auto  newSettings  =  gmmSolver - > getSettings ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                newSettings . setPrecision ( precision ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                newSettings . setRelativeTerminationCriterion ( relative ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                gmmSolver - > setSettings ( newSettings ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  else  if  ( nativeSolver )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auto  newSettings  =  nativeSolver - > getSettings ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                newSettings . setPrecision ( precision ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                newSettings . setRelativeTerminationCriterion ( relative ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                nativeSolver - > setSettings ( newSettings ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  else  if  ( eigenSolver )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                eigenSolver - > getSettings ( ) . setPrecision ( precision ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // no relative flag for eigen solver
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  else  if  ( eliminationSolver )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // elimination solver does not consider a precision so nothing to do
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                STORM_LOG_THROW ( false ,  storm : : exceptions : : NotImplementedException ,  " Changing the precision for the given linear equation solver type is not implemented " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        void   StandardMinMaxLinearEquationSolver < storm : : RationalNumber > : : setPrecisionRelativeOfLinearEquationSolver ( std : : unique_ptr < storm : : solver : : LinearEquationSolver < storm : : RationalNumber > > &  linEqSolver ,  storm : : RationalNumber  precision ,  bool  relative )  const  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Intentionally left empty
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					         
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        template < typename  ValueType >  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        StandardMinMaxLinearEquationSolverSettings < ValueType >  const &  StandardMinMaxLinearEquationSolver < ValueType > : : getSettings ( )  const  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            return  settings ;