@ -307,8 +307,6 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            bool  useGaussSeidelMultiplication  =  multiplicationStyle  = =  storm : : solver : : MultiplicationStyle : : GaussSeidel ;  
				 
				 
				            bool  useGaussSeidelMultiplication  =  multiplicationStyle  = =  storm : : solver : : MultiplicationStyle : : GaussSeidel ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            std : : vector < ValueType > *  originalX  =  currentX ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            bool  converged  =  false ;  
				 
				 
				            bool  converged  =  false ;  
			
		 
		
	
		
			
				 
				 
				            bool  terminate  =  this - > terminateNow ( * currentX ,  guarantee ) ;  
				 
				 
				            bool  terminate  =  this - > terminateNow ( * currentX ,  guarantee ) ;  
			
		 
		
	
		
			
				 
				 
				            uint64_t  iterations  =  currentIterations ;  
				 
				 
				            uint64_t  iterations  =  currentIterations ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -320,21 +318,16 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				                    this - > multiplier - > multiply ( env ,  * currentX ,  & b ,  * newX ) ;  
				 
				 
				                    this - > multiplier - > multiply ( env ,  * currentX ,  & b ,  * newX ) ;  
			
		 
		
	
		
			
				 
				 
				                }  
				 
				 
				                }  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				                // Now check for termination .
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                // Check for convergence .
  
			
		 
		
	
		
			
				 
				 
				                converged  =  storm : : utility : : vector : : equalModuloPrecision < ValueType > ( * currentX ,  * newX ,  precision ,  relative ) ;  
				 
				 
				                converged  =  storm : : utility : : vector : : equalModuloPrecision < ValueType > ( * currentX ,  * newX ,  precision ,  relative ) ;  
			
		 
		
	
		
			
				 
				 
				                terminate  =  this - > terminateNow ( * currentX ,  guarantee ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                // Potentially show progress.
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                this - > showProgressIterative ( iterations ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				                // Set up next iter ation.
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                // Check for termination.
  
			
		 
		
	
		
			
				 
				 
				                std : : swap ( currentX ,  newX ) ;  
				 
				 
				                std : : swap ( currentX ,  newX ) ;  
			
		 
		
	
		
			
				 
				 
				                + + iterations ;  
				 
				 
				                + + iterations ;  
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                terminate  =  this - > terminateNow ( * currentX ,  guarantee ) ;   
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				            // Swap the pointers so that the output is always in currentX.
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            if  ( originalX  = =  newX )  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                std : : swap ( currentX ,  newX ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                // Potentially show progress.
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                this - > showProgressIterative ( iterations ) ;  
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            return  PowerIterationResult ( iterations  -  currentIterations ,  converged  ?  SolverStatus : : Converged  :  ( terminate  ?  SolverStatus : : TerminatedEarly  :  SolverStatus : : MaximalIterationsExceeded ) ) ;  
				 
				 
				            return  PowerIterationResult ( iterations  -  currentIterations ,  converged  ?  SolverStatus : : Converged  :  ( terminate  ?  SolverStatus : : TerminatedEarly  :  SolverStatus : : MaximalIterationsExceeded ) ) ;  
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -883,6 +876,8 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            bool  relative  =  env . solver ( ) . native ( ) . getRelativeTerminationCriterion ( ) ;  
				 
				 
				            bool  relative  =  env . solver ( ) . native ( ) . getRelativeTerminationCriterion ( ) ;  
			
		 
		
	
		
			
				 
				 
				            auto  multiplicationStyle  =  env . solver ( ) . native ( ) . getPowerMethodMultiplicationStyle ( ) ;  
				 
				 
				            auto  multiplicationStyle  =  env . solver ( ) . native ( ) . getPowerMethodMultiplicationStyle ( ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            std : : vector < ImpreciseType >  const *  originalX  =  & x ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            std : : vector < ImpreciseType > *  currentX  =  & x ;  
				 
				 
				            std : : vector < ImpreciseType > *  currentX  =  & x ;  
			
		 
		
	
		
			
				 
				 
				            std : : vector < ImpreciseType > *  newX  =  & tmpX ;  
				 
				 
				            std : : vector < ImpreciseType > *  newX  =  & tmpX ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -923,6 +918,11 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				                }  
				 
				 
				                }  
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            // Swap the two vectors if the current result is not in the original x.
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            if  ( currentX  ! =  originalX )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                std : : swap ( x ,  tmpX ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            if  ( status  = =  SolverStatus : : InProgress  & &  overallIterations  = =  maxIter )  {  
				 
				 
				            if  ( status  = =  SolverStatus : : InProgress  & &  overallIterations  = =  maxIter )  {  
			
		 
		
	
		
			
				 
				 
				                status  =  SolverStatus : : MaximalIterationsExceeded ;  
				 
				 
				                status  =  SolverStatus : : MaximalIterationsExceeded ;  
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }