switchable random number generators
This commit is contained in:
		
							parent
							
								
									c5a2865639
								
							
						
					
					
						commit
						578ca7bab6
					
				@ -1,6 +1,6 @@
 | 
				
			|||||||
lib_LTLIBRARIES = libla.la
 | 
					lib_LTLIBRARIES = libla.la
 | 
				
			||||||
include_HEADERS = version.h simple.h vecmat3.h quaternion.h fortran.h cuda_la.h auxstorage.h  davidson.h   laerror.h    mat.h          qsort.h             vec.h bisection.h   diis.h       la.h         noncblas.h     smat.h bitvector.h   fourindex.h  la_traits.h  nonclass.h     sparsemat.h sparsesmat.h csrmat.h conjgrad.h    gmres.h      matexp.h     permutation.h   polynomial.h contfrac.h graph.h
 | 
					include_HEADERS = version.h simple.h vecmat3.h quaternion.h fortran.h cuda_la.h auxstorage.h  davidson.h   laerror.h    mat.h          qsort.h             vec.h bisection.h   diis.h       la.h         noncblas.h     smat.h bitvector.h   fourindex.h  la_traits.h random.h  nonclass.h     sparsemat.h sparsesmat.h csrmat.h conjgrad.h    gmres.h      matexp.h     permutation.h   polynomial.h contfrac.h graph.h
 | 
				
			||||||
libla_la_SOURCES = simple.cc quaternion.cc vecmat3.cc vec.cc mat.cc smat.cc sparsemat.cc sparsesmat.cc csrmat.cc laerror.cc noncblas.cc  bitvector.cc strassen.cc nonclass.cc cuda_la.cc fourindex.cc permutation.cc polynomial.cc contfrac.cc graph.cc
 | 
					libla_la_SOURCES = simple.cc quaternion.cc vecmat3.cc vec.cc mat.cc smat.cc sparsemat.cc sparsesmat.cc csrmat.cc laerror.cc noncblas.cc  bitvector.cc strassen.cc nonclass.cc cuda_la.cc fourindex.cc permutation.cc polynomial.cc contfrac.cc graph.cc random.cc
 | 
				
			||||||
nodist_libla_la_SOURCES = version.cc
 | 
					nodist_libla_la_SOURCES = version.cc
 | 
				
			||||||
check_PROGRAMS = t test tX
 | 
					check_PROGRAMS = t test tX
 | 
				
			||||||
t_SOURCES = t.cc t2.cc 
 | 
					t_SOURCES = t.cc t2.cc 
 | 
				
			||||||
 | 
				
			|||||||
@ -44,6 +44,7 @@
 | 
				
			|||||||
//using namespace std;
 | 
					//using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "laerror.h"
 | 
					#include "laerror.h"
 | 
				
			||||||
 | 
					#include "random.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "cuda_la.h"
 | 
					#include "cuda_la.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -70,6 +71,7 @@ extern "C" {
 | 
				
			|||||||
namespace LA {
 | 
					namespace LA {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//forward declarations
 | 
					//forward declarations
 | 
				
			||||||
template<typename C> class NRVec;
 | 
					template<typename C> class NRVec;
 | 
				
			||||||
template<typename C> class NRVec_from1;
 | 
					template<typename C> class NRVec_from1;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								mat.cc
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								mat.cc
									
									
									
									
									
								
							@ -1314,7 +1314,7 @@ void NRMat<double>::randomize(const double &x) {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
		for(register int i=0; i<nn; ++i){
 | 
							for(register int i=0; i<nn; ++i){
 | 
				
			||||||
			for(register int j=0; j<mm; ++j){
 | 
								for(register int j=0; j<mm; ++j){
 | 
				
			||||||
				(*this)(i,j) = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
									(*this)(i,j) = x*RANDDOUBLESIGNED();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#ifdef CUDALA
 | 
					#ifdef CUDALA
 | 
				
			||||||
@ -1322,7 +1322,7 @@ void NRMat<double>::randomize(const double &x) {
 | 
				
			|||||||
		NRMat<double> tmp(nn, mm, cpu);
 | 
							NRMat<double> tmp(nn, mm, cpu);
 | 
				
			||||||
		double *tmp_data = tmp;
 | 
							double *tmp_data = tmp;
 | 
				
			||||||
		for(register size_t i=0; i<(size_t)nn*mm; ++i){
 | 
							for(register size_t i=0; i<(size_t)nn*mm; ++i){
 | 
				
			||||||
			tmp_data[i] = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
								tmp_data[i] = x*RANDDOUBLESIGNED();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		tmp.moveto(this->location);
 | 
							tmp.moveto(this->location);
 | 
				
			||||||
		*this |= tmp;
 | 
							*this |= tmp;
 | 
				
			||||||
@ -1343,8 +1343,8 @@ void NRMat<std::complex<double> >::randomize(const double &x) {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
		for(register int i=0; i<nn; ++i){
 | 
							for(register int i=0; i<nn; ++i){
 | 
				
			||||||
			for(register int j=0; j<mm; ++j){
 | 
								for(register int j=0; j<mm; ++j){
 | 
				
			||||||
				const double re = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
									const double re = x*RANDDOUBLESIGNED();
 | 
				
			||||||
				const double im = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
									const double im = x*RANDDOUBLESIGNED();
 | 
				
			||||||
				(*this)(i,j) = std::complex<double>(re, im);
 | 
									(*this)(i,j) = std::complex<double>(re, im);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -1353,8 +1353,8 @@ void NRMat<std::complex<double> >::randomize(const double &x) {
 | 
				
			|||||||
		NRMat<std::complex<double> > tmp(nn, mm, cpu);
 | 
							NRMat<std::complex<double> > tmp(nn, mm, cpu);
 | 
				
			||||||
		std::complex<double> *tmp_data = tmp;
 | 
							std::complex<double> *tmp_data = tmp;
 | 
				
			||||||
		for(register size_t i=0; i<(size_t)nn*mm; ++i){
 | 
							for(register size_t i=0; i<(size_t)nn*mm; ++i){
 | 
				
			||||||
			const double re = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
								const double re = x*RANDDOUBLESIGNED();
 | 
				
			||||||
			const double im = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
								const double im = x*RANDDOUBLESIGNED();
 | 
				
			||||||
			tmp_data[i] = std::complex<double>(re, im);
 | 
								tmp_data[i] = std::complex<double>(re, im);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		tmp.moveto(this->location);
 | 
							tmp.moveto(this->location);
 | 
				
			||||||
 | 
				
			|||||||
@ -167,7 +167,7 @@ this->copyonwrite();
 | 
				
			|||||||
this->identity();
 | 
					this->identity();
 | 
				
			||||||
for(int i=n-1; i>=1; --i)
 | 
					for(int i=n-1; i>=1; --i)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	int j= random()%(i+1);
 | 
						int j= RANDINT32()%(i+1);
 | 
				
			||||||
	T tmp = (*this)[i+1];
 | 
						T tmp = (*this)[i+1];
 | 
				
			||||||
	(*this)[i+1]=(*this)[j+1];
 | 
						(*this)[i+1]=(*this)[j+1];
 | 
				
			||||||
	(*this)[j+1]=tmp;
 | 
						(*this)[j+1]=tmp;
 | 
				
			||||||
 | 
				
			|||||||
@ -417,15 +417,15 @@ void Quaternion<T>::random_rotation()
 | 
				
			|||||||
T  s1,s2,s;
 | 
					T  s1,s2,s;
 | 
				
			||||||
do
 | 
					do
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	q[0]=2.*random()/(1. + RAND_MAX) - 1.;
 | 
						q[0]= RANDDOUBLESIGNED();
 | 
				
			||||||
	q[1]=2.*random()/(1. + RAND_MAX) - 1.;
 | 
						q[1]= RANDDOUBLESIGNED();
 | 
				
			||||||
	s1 = q[0]*q[0] + q[1]*q[1];
 | 
						s1 = q[0]*q[0] + q[1]*q[1];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	while(s1>1);
 | 
						while(s1>1);
 | 
				
			||||||
do
 | 
					do
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        q[2]=2.*random()/(1. + RAND_MAX) - 1.;
 | 
					        q[2]= RANDDOUBLESIGNED();
 | 
				
			||||||
        q[3]=2.*random()/(1. + RAND_MAX) - 1.;
 | 
					        q[3]= RANDDOUBLESIGNED();
 | 
				
			||||||
        s2 = q[2]*q[2] + q[3]*q[3];
 | 
					        s2 = q[2]*q[2] + q[3]*q[3];
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        while(s2>1);
 | 
					        while(s2>1);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								random.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								random.cc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include "random.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LA {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					WEAK_SYMBOL  double randdouble() {return random()/(1.+RAND_MAX);}
 | 
				
			||||||
 | 
					WEAK_SYMBOL  double randdoublesigned() {return 2.*random()/(1.+RAND_MAX)-1.;}
 | 
				
			||||||
 | 
					WEAK_SYMBOL  int randint32() {return random();}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}//namespace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										33
									
								
								random.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								random.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					#ifndef _RANDOM_H
 | 
				
			||||||
 | 
					#define _RANDOM_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LA {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//RANDOM numbers defaulting to standard library but switchable to user's functions
 | 
				
			||||||
 | 
					#ifndef RANDDOUBLE
 | 
				
			||||||
 | 
					#define RANDDOUBLE randdouble
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef RANDDOUBLESIGNED
 | 
				
			||||||
 | 
					#define RANDDOUBLESIGNED randdoublesigned
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef RANDINT32
 | 
				
			||||||
 | 
					#define RANDINT32 randint32
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					extern double randdouble();
 | 
				
			||||||
 | 
					extern double randdoublesigned();
 | 
				
			||||||
 | 
					extern int randint32();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __GNUC__
 | 
				
			||||||
 | 
					#define WEAK_SYMBOL __attribute__((weak)) 
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define WEAK_SYMBOL 
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}//namespace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										6
									
								
								smat.cc
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								smat.cc
									
									
									
									
									
								
							@ -249,7 +249,7 @@ void NRSMat<double>::randomize(const double &x) {
 | 
				
			|||||||
	NOT_GPU(*this);
 | 
						NOT_GPU(*this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(size_t i=0; i<NN2; ++i){
 | 
						for(size_t i=0; i<NN2; ++i){
 | 
				
			||||||
		v[i] = x*(2.*random()/(1.+RAND_MAX) -1.);
 | 
							v[i] = x*RANDDOUBLESIGNED();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -259,8 +259,8 @@ void NRSMat<double>::randomize(const double &x) {
 | 
				
			|||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
void NRSMat<std::complex<double> >::randomize(const double &x) {
 | 
					void NRSMat<std::complex<double> >::randomize(const double &x) {
 | 
				
			||||||
	for(register size_t i=0; i<NN2; ++i) v[i].real(x*(2.*random()/(1. + RAND_MAX) -1.));
 | 
						for(register size_t i=0; i<NN2; ++i) v[i].real(x*RANDDOUBLESIGNED());
 | 
				
			||||||
	for(register size_t i=0; i<NN2; ++i) v[i].imag(x*(2.*random()/(1. + RAND_MAX) -1.));
 | 
						for(register size_t i=0; i<NN2; ++i) v[i].imag(x*RANDDOUBLESIGNED());
 | 
				
			||||||
	for(register int i=0; i<nn; ++i){
 | 
						for(register int i=0; i<nn; ++i){
 | 
				
			||||||
		for(register int j=0; j<=i; ++j){
 | 
							for(register int j=0; j<=i; ++j){
 | 
				
			||||||
		       	if(i == j) v[i*(size_t)(i+1)/2+j].imag(0.); //hermitean
 | 
							       	if(i == j) v[i*(size_t)(i+1)/2+j].imag(0.); //hermitean
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										90
									
								
								t.cc
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								t.cc
									
									
									
									
									
								
							@ -54,7 +54,7 @@ void f2(double *c)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
inline int randind(const int n)
 | 
					inline int randind(const int n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return int(random()/(1.+RAND_MAX)*n);
 | 
						return int(RANDDOUBLE()*n);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
complex<double> mycident (const complex<double>&x) {return x;}
 | 
					complex<double> mycident (const complex<double>&x) {return x;}
 | 
				
			||||||
@ -640,7 +640,7 @@ for(int n=8; n<=1024*1024;n+=n)
 | 
				
			|||||||
	cout << "\n\n\ntiming for size "<<n<<endl;
 | 
						cout << "\n\n\ntiming for size "<<n<<endl;
 | 
				
			||||||
	if(n<=512) {
 | 
						if(n<=512) {
 | 
				
			||||||
	NRMat<double> a(0.,n,n);
 | 
						NRMat<double> a(0.,n,n);
 | 
				
			||||||
	for(int i=0; i<sparsity;i++) a(randind(n),randind(n))=random()/(1.+RAND_MAX);
 | 
						for(int i=0; i<sparsity;i++) a(randind(n),randind(n))=RANDDOUBLE();
 | 
				
			||||||
	double t0=clock()/((double) (CLOCKS_PER_SEC));	
 | 
						double t0=clock()/((double) (CLOCKS_PER_SEC));	
 | 
				
			||||||
	//cout <<a;
 | 
						//cout <<a;
 | 
				
			||||||
	NRMat<double> b(exp(a));
 | 
						NRMat<double> b(exp(a));
 | 
				
			||||||
@ -653,7 +653,7 @@ for(int n=8; n<=1024*1024;n+=n)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),random()/(1.+RAND_MAX));
 | 
						for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),RANDDOUBLE());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//cout <<aa;
 | 
						//cout <<aa;
 | 
				
			||||||
	double t2=clock()/((double) (CLOCKS_PER_SEC));        
 | 
						double t2=clock()/((double) (CLOCKS_PER_SEC));        
 | 
				
			||||||
@ -672,10 +672,10 @@ if(0)
 | 
				
			|||||||
int n;
 | 
					int n;
 | 
				
			||||||
cin>>n;
 | 
					cin>>n;
 | 
				
			||||||
	SparseMat<double> aa(n,n);
 | 
						SparseMat<double> aa(n,n);
 | 
				
			||||||
	for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),random()/(1.+RAND_MAX));
 | 
						for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),RANDDOUBLE());
 | 
				
			||||||
	SparseMat<double> bb=exp(aa);
 | 
						SparseMat<double> bb=exp(aa);
 | 
				
			||||||
	NRVec<double> v(n);
 | 
						NRVec<double> v(n);
 | 
				
			||||||
	 for(int i=0; i<n;++i) v[i]=random()/(1.+RAND_MAX);
 | 
						 for(int i=0; i<n;++i) v[i]=RANDDOUBLE();
 | 
				
			||||||
	NRVec<double> res1=bb*v;
 | 
						NRVec<double> res1=bb*v;
 | 
				
			||||||
	NRVec<double> res2=exptimes(aa,v);
 | 
						NRVec<double> res2=exptimes(aa,v);
 | 
				
			||||||
	cout <<"difference = "<<(res1-res2).norm()<<endl;
 | 
						cout <<"difference = "<<(res1-res2).norm()<<endl;
 | 
				
			||||||
@ -687,8 +687,8 @@ int n,k,m;
 | 
				
			|||||||
cin >>n>>k>>m;
 | 
					cin >>n>>k>>m;
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
NRMat<double> a(n,k),b(k,m),c(n,m),d(n,m);
 | 
					NRMat<double> a(n,k),b(k,m),c(n,m),d(n,m);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<k;++j) a(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<n;++i) for(int j=0;j<k;++j) a(i,j)= RANDDOUBLE();
 | 
				
			||||||
for(int i=0;i<k;++i) for(int j=0;j<m;++j) b(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<k;++i) for(int j=0;j<m;++j) b(i,j)= RANDDOUBLE();
 | 
				
			||||||
c.gemm(0., a, 'n', b, 'n', .6);
 | 
					c.gemm(0., a, 'n', b, 'n', .6);
 | 
				
			||||||
SparseMat<double> aa(a);
 | 
					SparseMat<double> aa(a);
 | 
				
			||||||
d.gemm(0., aa, 'n', b, 'n', .6);
 | 
					d.gemm(0., aa, 'n', b, 'n', .6);
 | 
				
			||||||
@ -697,8 +697,8 @@ cout  <<"test error = "<<(c-d).norm()<<endl;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
NRMat<double> a(k,n),b(k,m),c(n,m),d(n,m);
 | 
					NRMat<double> a(k,n),b(k,m),c(n,m),d(n,m);
 | 
				
			||||||
for(int i=0;i<k;++i) for(int j=0;j<n;++j) a(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<k;++i) for(int j=0;j<n;++j) a(i,j)= RANDDOUBLE();
 | 
				
			||||||
for(int i=0;i<k;++i) for(int j=0;j<m;++j) b(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<k;++i) for(int j=0;j<m;++j) b(i,j)= RANDDOUBLE();
 | 
				
			||||||
c.gemm(0., a, 't', b, 'n', .7);
 | 
					c.gemm(0., a, 't', b, 'n', .7);
 | 
				
			||||||
SparseMat<double> aa(a);
 | 
					SparseMat<double> aa(a);
 | 
				
			||||||
d.gemm(0., aa, 't', b, 'n', .7);
 | 
					d.gemm(0., aa, 't', b, 'n', .7);
 | 
				
			||||||
@ -707,8 +707,8 @@ cout  <<"test error = "<<(c-d).norm()<<endl;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
NRMat<double> a(n,k),b(m,k),c(n,m),d(n,m);
 | 
					NRMat<double> a(n,k),b(m,k),c(n,m),d(n,m);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<k;++j) a(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<n;++i) for(int j=0;j<k;++j) a(i,j)= RANDDOUBLE();
 | 
				
			||||||
for(int i=0;i<m;++i) for(int j=0;j<k;++j) b(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<m;++i) for(int j=0;j<k;++j) b(i,j)= RANDDOUBLE();
 | 
				
			||||||
c.gemm(0., a, 'n', b, 't', .8);
 | 
					c.gemm(0., a, 'n', b, 't', .8);
 | 
				
			||||||
SparseMat<double> aa(a);
 | 
					SparseMat<double> aa(a);
 | 
				
			||||||
d.gemm(0., aa, 'n', b, 't', .8);
 | 
					d.gemm(0., aa, 'n', b, 't', .8);
 | 
				
			||||||
@ -717,8 +717,8 @@ cout  <<"test error = "<<(c-d).norm()<<endl;
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
NRMat<double> a(k,n),b(m,k),c(n,m),d(n,m);
 | 
					NRMat<double> a(k,n),b(m,k),c(n,m),d(n,m);
 | 
				
			||||||
for(int i=0;i<k;++i) for(int j=0;j<n;++j) a(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<k;++i) for(int j=0;j<n;++j) a(i,j)= RANDDOUBLE();
 | 
				
			||||||
for(int i=0;i<m;++i) for(int j=0;j<k;++j) b(i,j)= random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<m;++i) for(int j=0;j<k;++j) b(i,j)= RANDDOUBLE();
 | 
				
			||||||
c.gemm(0., a, 't', b, 't', .9);
 | 
					c.gemm(0., a, 't', b, 't', .9);
 | 
				
			||||||
SparseMat<double> aa(a);
 | 
					SparseMat<double> aa(a);
 | 
				
			||||||
d.gemm(0., aa, 't', b, 't', .9);
 | 
					d.gemm(0., aa, 't', b, 't', .9);
 | 
				
			||||||
@ -764,8 +764,8 @@ cin >>n;
 | 
				
			|||||||
NRMat<double> a(n,n);
 | 
					NRMat<double> a(n,n);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	a(i,j)= random()/(1.+RAND_MAX);
 | 
						a(i,j)= RANDDOUBLE();
 | 
				
			||||||
	a(j,i)= random()/(1.+RAND_MAX);
 | 
						a(j,i)= RANDDOUBLE();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
NRMat<double> b; b|=a;
 | 
					NRMat<double> b; b|=a;
 | 
				
			||||||
NRVec<double> er(n),ei(n);
 | 
					NRVec<double> er(n),ei(n);
 | 
				
			||||||
@ -810,7 +810,7 @@ cin>>n;
 | 
				
			|||||||
NRMat<double> a(n,n);
 | 
					NRMat<double> a(n,n);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<i;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<i;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        a(i,j)= random()/(1.+RAND_MAX);
 | 
					        a(i,j)= RANDDOUBLE();
 | 
				
			||||||
        a(j,i)= -a(i,j);
 | 
					        a(j,i)= -a(i,j);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
cout <<"a matrix \n"<<a;
 | 
					cout <<"a matrix \n"<<a;
 | 
				
			||||||
@ -836,9 +836,9 @@ NRMat<double> a(n,n);
 | 
				
			|||||||
NRVec<double>u(n),v,w;
 | 
					NRVec<double>u(n),v,w;
 | 
				
			||||||
for(int i=0;i<n;++i) 
 | 
					for(int i=0;i<n;++i) 
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
	u[i]=f*random()/(1.+RAND_MAX);
 | 
						u[i]=f*RANDDOUBLE();
 | 
				
			||||||
	for(int j=0;j<n;++j)
 | 
						for(int j=0;j<n;++j)
 | 
				
			||||||
       		 a(i,j)= f*random()/(1.+RAND_MAX);
 | 
					       		 a(i,j)= f*RANDDOUBLE();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
//cout <<"a matrix \n"<<a;
 | 
					//cout <<"a matrix \n"<<a;
 | 
				
			||||||
//cout<<"EXP\n";
 | 
					//cout<<"EXP\n";
 | 
				
			||||||
@ -873,7 +873,7 @@ cin>>n;
 | 
				
			|||||||
NRMat<double> a(n,n);
 | 
					NRMat<double> a(n,n);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        a(i,j)= .1*random()/(1.+RAND_MAX);
 | 
					        a(i,j)= .1*RANDDOUBLE();
 | 
				
			||||||
        a(j,i)= a(i,j);
 | 
					        a(j,i)= a(i,j);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
NRMat<double> b=exp(a);
 | 
					NRMat<double> b=exp(a);
 | 
				
			||||||
@ -1029,7 +1029,7 @@ cin >>n;
 | 
				
			|||||||
SparseMat<double> a(n,n);
 | 
					SparseMat<double> a(n,n);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        a.add(i,j,random()/(1.+RAND_MAX));
 | 
					        a.add(i,j,RANDDOUBLE());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
a.setsymmetric();
 | 
					a.setsymmetric();
 | 
				
			||||||
NRSMat<double> aa(a); 
 | 
					NRSMat<double> aa(a); 
 | 
				
			||||||
@ -1061,11 +1061,11 @@ cin >>n;
 | 
				
			|||||||
NRSMat<double> a(n);
 | 
					NRSMat<double> a(n);
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        a(j,i)=a(i,j)=random()/(1.+RAND_MAX)*(i==j?10.:1.);
 | 
					        a(j,i)=a(i,j)=RANDDOUBLE()*(i==j?10.:1.);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
cout <<a;
 | 
					cout <<a;
 | 
				
			||||||
NRMat<double> y(1,n);
 | 
					NRMat<double> y(1,n);
 | 
				
			||||||
for(int i=0;i<n;++i) y(0,i)=random()/(1.+RAND_MAX);
 | 
					for(int i=0;i<n;++i) y(0,i)=RANDDOUBLE();
 | 
				
			||||||
cout <<y;
 | 
					cout <<y;
 | 
				
			||||||
linear_solve(a,&y,&d);
 | 
					linear_solve(a,&y,&d);
 | 
				
			||||||
cout << y;
 | 
					cout << y;
 | 
				
			||||||
@ -1078,7 +1078,7 @@ int n;
 | 
				
			|||||||
cin >>n;
 | 
					cin >>n;
 | 
				
			||||||
SparseMat<double> a(n,n);
 | 
					SparseMat<double> a(n,n);
 | 
				
			||||||
int spars=n*n/3;
 | 
					int spars=n*n/3;
 | 
				
			||||||
        for(int i=0; i<spars;i++) a.add(randind(n),randind(n),random()/(1.+RAND_MAX));
 | 
					        for(int i=0; i<spars;i++) a.add(randind(n),randind(n),RANDDOUBLE());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NRMat<double> aa(a);
 | 
					NRMat<double> aa(a);
 | 
				
			||||||
NRVec<double> v(aa[0],n*n);
 | 
					NRVec<double> v(aa[0],n*n);
 | 
				
			||||||
@ -1115,7 +1115,7 @@ NRVec<double> rr(n);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<=i;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        a(i,j)= random()/(1.+RAND_MAX);
 | 
					        a(i,j)= RANDDOUBLE();
 | 
				
			||||||
	if(i==j) a(i,i)+= .5*(i-n);
 | 
						if(i==j) a(i,i)+= .5*(i-n);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1151,8 +1151,8 @@ NRVec<double> rr(n),ii(n);
 | 
				
			|||||||
double tmp=0.;
 | 
					double tmp=0.;
 | 
				
			||||||
for(int i=0;i<n;++i) for(int j=0;j<n;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<n;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        a(i,j)= random()/(1.+RAND_MAX);
 | 
					        a(i,j)= RANDDOUBLE();
 | 
				
			||||||
        a(j,i)= random()/(1.+RAND_MAX);
 | 
					        a(j,i)= RANDDOUBLE();
 | 
				
			||||||
	if(i==j) a(i,i)+= .5*(i-n);
 | 
						if(i==j) a(i,i)+= .5*(i-n);
 | 
				
			||||||
	tmp+= (a(i,j)-a(j,i))*(a(i,j)-a(j,i));
 | 
						tmp+= (a(i,j)-a(j,i))*(a(i,j)-a(j,i));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -1190,8 +1190,8 @@ int n,m;
 | 
				
			|||||||
cin >>n>>m;
 | 
					cin >>n>>m;
 | 
				
			||||||
	SparseMat<double> aa(n,n);
 | 
						SparseMat<double> aa(n,n);
 | 
				
			||||||
	aa.setsymmetric();
 | 
						aa.setsymmetric();
 | 
				
			||||||
	for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),random()/(1.+RAND_MAX));
 | 
						for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),RANDDOUBLE());
 | 
				
			||||||
	for(int i=0; i<n; ++i) aa.add(i,i,500*random()/(1.+RAND_MAX));
 | 
						for(int i=0; i<n; ++i) aa.add(i,i,500*RANDDOUBLE());
 | 
				
			||||||
NRVec<double> r(m);
 | 
					NRVec<double> r(m);
 | 
				
			||||||
davidson(aa,r,(NRVec<double> *)NULL,"eivecs",m,1,1e-5,0,300,300);
 | 
					davidson(aa,r,(NRVec<double> *)NULL,"eivecs",m,1,1e-5,0,300,300);
 | 
				
			||||||
cout <<r;
 | 
					cout <<r;
 | 
				
			||||||
@ -1207,13 +1207,13 @@ int n,m;
 | 
				
			|||||||
cin >>n>>m;
 | 
					cin >>n>>m;
 | 
				
			||||||
        SparseMat<double> aa(n,n);
 | 
					        SparseMat<double> aa(n,n);
 | 
				
			||||||
        aa.setsymmetric();
 | 
					        aa.setsymmetric();
 | 
				
			||||||
        for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),random()/(1.+RAND_MAX));
 | 
					        for(int i=0; i<sparsity;i++) aa.add(randind(n),randind(n),RANDDOUBLE());
 | 
				
			||||||
        for(int i=0; i<n; ++i) aa.add(i,i,500*random()/(1.+RAND_MAX));
 | 
					        for(int i=0; i<n; ++i) aa.add(i,i,500*RANDDOUBLE());
 | 
				
			||||||
NRVec<double> r(m);
 | 
					NRVec<double> r(m);
 | 
				
			||||||
NRVec<double> r2(m);
 | 
					NRVec<double> r2(m);
 | 
				
			||||||
davidson(aa,r,(NRVec<double> *)NULL,"eivecs",m,1,1e-5,1,300,300);
 | 
					davidson(aa,r,(NRVec<double> *)NULL,"eivecs",m,1,1e-5,1,300,300);
 | 
				
			||||||
 SparseMat<double> bb(n,n);
 | 
					 SparseMat<double> bb(n,n);
 | 
				
			||||||
for(int i=0; i<sparsity2;i++) bb.add(randind(n),randind(n),random()/(1.+RAND_MAX));
 | 
					for(int i=0; i<sparsity2;i++) bb.add(randind(n),randind(n),RANDDOUBLE());
 | 
				
			||||||
SparseMat<double> e1,e2,cc;
 | 
					SparseMat<double> e1,e2,cc;
 | 
				
			||||||
e1=exp(bb);
 | 
					e1=exp(bb);
 | 
				
			||||||
e2=exp(bb*-1.);
 | 
					e2=exp(bb*-1.);
 | 
				
			||||||
@ -1236,12 +1236,12 @@ cin >>n>>m;
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		int k= randind(n);
 | 
							int k= randind(n);
 | 
				
			||||||
		int l= randind(n);
 | 
							int l= randind(n);
 | 
				
			||||||
		double a=random()/(1.+RAND_MAX);
 | 
							double a=RANDDOUBLE();
 | 
				
			||||||
		double b=random()/(1.+RAND_MAX)-.5;
 | 
							double b=RANDDOUBLE()-.5;
 | 
				
			||||||
		aa.add(k,l,a);
 | 
							aa.add(k,l,a);
 | 
				
			||||||
		aa.add(l,k,a+b/20);
 | 
							aa.add(l,k,a+b/20);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
        for(int i=0; i<n; ++i) aa.add(i,i,500*random()/(1.+RAND_MAX));
 | 
					        for(int i=0; i<n; ++i) aa.add(i,i,500*RANDDOUBLE());
 | 
				
			||||||
NRVec<double> r(m);
 | 
					NRVec<double> r(m);
 | 
				
			||||||
davidson(aa,r,(NRVec<double> *)NULL,"eivecs",m,1,1e-5,0,300,300);
 | 
					davidson(aa,r,(NRVec<double> *)NULL,"eivecs",m,1,1e-5,0,300,300);
 | 
				
			||||||
cout <<r;
 | 
					cout <<r;
 | 
				
			||||||
@ -1259,7 +1259,7 @@ NRVec<double> x(m);
 | 
				
			|||||||
for(int i=0;i<n;++i) for(int j=0;j<m;++j)
 | 
					for(int i=0;i<n;++i) for(int j=0;j<m;++j)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        //a(j,i)= 2*i*i*i-5*j+ +9*8*7*6*5*4*3*2/(i+j+1.)+3*(i*i+2*j*j*j);
 | 
					        //a(j,i)= 2*i*i*i-5*j+ +9*8*7*6*5*4*3*2/(i+j+1.)+3*(i*i+2*j*j*j);
 | 
				
			||||||
	a(i,j)= random()/(1.+RAND_MAX);
 | 
						a(i,j)= RANDDOUBLE();
 | 
				
			||||||
	if(i==j) a(i,i)+= .5*(i-n);
 | 
						if(i==j) a(i,i)+= .5*(i-n);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
for(int i=0;i<n;++i) b[i] = i;
 | 
					for(int i=0;i<n;++i) b[i] = i;
 | 
				
			||||||
@ -1297,9 +1297,9 @@ NRVec<double> b(n);
 | 
				
			|||||||
NRVec<double> x(m);
 | 
					NRVec<double> x(m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//tridiagonal
 | 
					//tridiagonal
 | 
				
			||||||
        for(int i=0; i<n; ++i) aa.add(i,i,random()/(1.+RAND_MAX));
 | 
					        for(int i=0; i<n; ++i) aa.add(i,i,RANDDOUBLE());
 | 
				
			||||||
	for(int i=0; i<n-1; i+=1) aa.add(i,i+1,.002*random()/(1.+RAND_MAX));
 | 
						for(int i=0; i<n-1; i+=1) aa.add(i,i+1,.002*RANDDOUBLE());
 | 
				
			||||||
	for(int i=0; i<n-1; i+=1) aa.add(i+1,i,.002*random()/(1.+RAND_MAX));
 | 
						for(int i=0; i<n-1; i+=1) aa.add(i+1,i,.002*RANDDOUBLE());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for(int i=0;i<n;++i) b[i] = i+1;
 | 
					for(int i=0;i<n;++i) b[i] = i+1;
 | 
				
			||||||
gmres(aa,b,x,1,1e-20,20,1,1,1,1000,1);
 | 
					gmres(aa,b,x,1,1e-20,20,1,1,1,1000,1);
 | 
				
			||||||
@ -1323,7 +1323,7 @@ int dim;
 | 
				
			|||||||
cin>>dim;
 | 
					cin>>dim;
 | 
				
			||||||
NRVec<double> solution(dim), deviation(dim);
 | 
					NRVec<double> solution(dim), deviation(dim);
 | 
				
			||||||
for(i=0; i<dim; ++i) solution[i]=i&1 ? i/2.:-i-3.;
 | 
					for(i=0; i<dim; ++i) solution[i]=i&1 ? i/2.:-i-3.;
 | 
				
			||||||
for(i=0; i<dim; ++i) deviation[i]= (i&2 ? 1:-1) * random()/(1.+RAND_MAX);
 | 
					for(i=0; i<dim; ++i) deviation[i]= (i&2 ? 1:-1) * RANDDOUBLE();
 | 
				
			||||||
double norm=1e100;
 | 
					double norm=1e100;
 | 
				
			||||||
for(int iter=1; iter<100 && norm>1e-8 ; ++iter)
 | 
					for(int iter=1; iter<100 && norm>1e-8 ; ++iter)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -1400,7 +1400,7 @@ cout  <<"test eigenvalues "<<hlp.norm()<<endl;
 | 
				
			|||||||
NRMat<double> ader(n,n);
 | 
					NRMat<double> ader(n,n);
 | 
				
			||||||
for(int i=0; i<n; ++i)
 | 
					for(int i=0; i<n; ++i)
 | 
				
			||||||
	for(int j=0; j<n; ++j)
 | 
						for(int j=0; j<n; ++j)
 | 
				
			||||||
		ader(i,j) = 2.*random()/(1.+RAND_MAX) -1.;
 | 
							ader(i,j) = RANDDOUBLESIGNED();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cout <<"eigenvalues\n"<<wr<<endl;
 | 
					cout <<"eigenvalues\n"<<wr<<endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1722,7 +1722,7 @@ int n;
 | 
				
			|||||||
cin >>n;
 | 
					cin >>n;
 | 
				
			||||||
NRMat<double> bb(0.,n,n);
 | 
					NRMat<double> bb(0.,n,n);
 | 
				
			||||||
int nn=0;
 | 
					int nn=0;
 | 
				
			||||||
for(int i=0; i<n; ++i) for(int j=i; j<n; ++j) {if((double)random()/RAND_MAX>0.995 || i==j) {++nn; bb(i,j)=bb(j,i)=(double)random()/RAND_MAX*(i==j?10.:.5/(i+j)*(random()>RAND_MAX/2?1:-1));}}
 | 
					for(int i=0; i<n; ++i) for(int j=i; j<n; ++j) {if(RANDDOUBLE()>0.995 || i==j) {++nn; bb(i,j)=bb(j,i)=RANDDOUBLE()*(i==j?10.:.5/(i+j)*(RANDDOUBLE()>.5?1:-1));}}
 | 
				
			||||||
bb=bb*bb.transpose();
 | 
					bb=bb*bb.transpose();
 | 
				
			||||||
//cout <<bb;
 | 
					//cout <<bb;
 | 
				
			||||||
nn=0;
 | 
					nn=0;
 | 
				
			||||||
@ -1786,8 +1786,8 @@ if(0)
 | 
				
			|||||||
int n;
 | 
					int n;
 | 
				
			||||||
cin >>n;
 | 
					cin >>n;
 | 
				
			||||||
SparseSMat<double> bh(n,n);
 | 
					SparseSMat<double> bh(n,n);
 | 
				
			||||||
for(int i=0; i<=n/400; ++i) for(int j=i; j<n; ++j) {if((double)random()/RAND_MAX>0.995 || i==j) 
 | 
					for(int i=0; i<=n/400; ++i) for(int j=i; j<n; ++j) {if(RANDDOUBLE()>0.995 || i==j) 
 | 
				
			||||||
	{bh.add(i,j,(double)random()/RAND_MAX*(i==j?10.:(random()>RAND_MAX/2?1:-1)),false);}}
 | 
						{bh.add(i,j,RANDDOUBLE()*(i==j?10.:(RANDDOUBLE()>.5?1:-1)),false);}}
 | 
				
			||||||
if(n<1000) cout <<"Random matrix\n"<<bh;
 | 
					if(n<1000) cout <<"Random matrix\n"<<bh;
 | 
				
			||||||
SparseSMat<double> bb(n,n);
 | 
					SparseSMat<double> bb(n,n);
 | 
				
			||||||
bb.gemm(0.,bh,'c',bh,'n',1.);
 | 
					bb.gemm(0.,bh,'c',bh,'n',1.);
 | 
				
			||||||
@ -2440,7 +2440,7 @@ simple_linfit<double,3> fit;
 | 
				
			|||||||
double funcs[3];
 | 
					double funcs[3];
 | 
				
			||||||
for(int i=0; i<100; ++i) 
 | 
					for(int i=0; i<100; ++i) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	double x = 10*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
						double x = 10*RANDDOUBLESIGNED();
 | 
				
			||||||
	funcs[0]=1;
 | 
						funcs[0]=1;
 | 
				
			||||||
	funcs[1]=x;
 | 
						funcs[1]=x;
 | 
				
			||||||
	funcs[2]=x*x;
 | 
						funcs[2]=x*x;
 | 
				
			||||||
@ -2585,7 +2585,7 @@ if(sizeof(int)!=read(f,&seed,sizeof(int))) laerror("cannot read /dev/random");
 | 
				
			|||||||
close(f);
 | 
					close(f);
 | 
				
			||||||
srand(seed);
 | 
					srand(seed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
double t=random();
 | 
					double t=RANDINT32();
 | 
				
			||||||
t/=(1L<<30);
 | 
					t/=(1L<<30);
 | 
				
			||||||
t-=1;
 | 
					t-=1;
 | 
				
			||||||
cout <<"theta = "<<t<<endl;
 | 
					cout <<"theta = "<<t<<endl;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vec.cc
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								vec.cc
									
									
									
									
									
								
							@ -194,7 +194,7 @@ void NRVec<double>::randomize(const double &x){
 | 
				
			|||||||
	NOT_GPU(*this);
 | 
						NOT_GPU(*this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(register int i=0; i<nn; ++i){
 | 
						for(register int i=0; i<nn; ++i){
 | 
				
			||||||
		v[i] = x*(2.*random()/(1. + RAND_MAX) - 1.);
 | 
							v[i] = x*RANDDOUBLESIGNED();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -211,7 +211,7 @@ void NRVec<std::complex<double> >::randomize(const double &x) {
 | 
				
			|||||||
	NOT_GPU(*this);
 | 
						NOT_GPU(*this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(register int i=0; i<nn; ++i){
 | 
						for(register int i=0; i<nn; ++i){
 | 
				
			||||||
		v[i] = std::complex<double>(x*(2.*random()/(1. + RAND_MAX) - 1.), x*(2.*random()/(1. + RAND_MAX) - 1.));
 | 
							v[i] = std::complex<double>(x*RANDDOUBLESIGNED(), x*RANDDOUBLESIGNED());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user