Click here to Skip to main content
15,893,904 members
Articles / Programming Languages / C++

A Normal / Exponential Random Generator and Histogram Class

Rate me:
Please Sign up or sign in to vote.
4.73/5 (11 votes)
2 Dec 20024 min read 276.7K   8.1K   55  
A fast random generator with normal or exponential distribution + a histogram class
In this article, you will find a fast generator for Random Variable, namely normal and exponential distributions. It is based on George Marsaglia's and Wai Wan Tsang's work.
// PGLLineHor.h: interface for the CPGLLineHor class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PGLLINEHOR_H__C503FBE7_5D5B_49D1_9A81_8E1B24EEFB12__INCLUDED_)
#define AFX_PGLLINEHOR_H__C503FBE7_5D5B_49D1_9A81_8E1B24EEFB12__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "PGLLine.h"

class PGL_EXT_CLASS CPGLLineHor : public CPGLLine  
{
public:
    DECLARE_SERIAL(CPGLLineHor);

	//! Default construtor
	CPGLLineHor();
	//! copy constructor
	CPGLLineHor(const CPGLLineHor& lv);
	//! assignement constructor
	CPGLLineHor& operator = (const CPGLLineHor& lv);
    //! returns a pointer to a copy of the object
    virtual CPGLObject* MakeCopy()
    {   CPGLObject* pCopy=new CPGLLineHor(*this); return pCopy; };
	//! Default destructor
	virtual ~CPGLLineHor();
	
	//! Sets horizontal position
	void SetY(double Y) {	m_dY = Y;};
	//! Returns horizontal position
	double GetY() const {	return m_dY;};
	//! Sets caption
	void SetCaption( const CPGLText& caption)	{ m_tCaption = caption;};
	void SetCaption( const CString& caption)	{ m_tCaption.SetString(caption);};
	const CPGLText& GetCaption() const	{	return m_tCaption;};
	const CString& GetCaptionString() const	{	return m_tCaption.GetString();};

    /** returns the extent of the datas
    The array extent is filled like this :
    \begin{itemize}
        \item extent[0] : min(x)
        \item extent[1] : __max(x)
        \item extent[2] : min(y)
        \item extent[3] : __max(y)
    \end{itemize}
    */
    virtual double* GetExtent(CPGLView* pView);
    ///virtual function to override in derived classes
    virtual void UpdateExtent(CPGLView* pView);


	void PlotGfx(gfxinterface::CGfxInterface& gfx);

    //! Serialize functions
    void Serialize(CArchive& archive);

    //! Debuggin functions
    #ifdef _DEBUG
        virtual void Dump( CDumpContext& dc ) const;
        virtual void AssertValid() const;    // Override
    #endif
    //@}

protected:

protected:
	/*! \name Attributes
	*/
	//@{
	//! vertical position
	double m_dY;
	//! Caption
	CPGLText m_tCaption;
	//@}
};

#endif // !defined(AFX_PGLLINEHOR_H__C503FBE7_5D5B_49D1_9A81_8E1B24EEFB12__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Engineer
United States United States
Jonathan de Halleux is Civil Engineer in Applied Mathematics. He finished his PhD in 2004 in the rainy country of Belgium. After 2 years in the Common Language Runtime (i.e. .net), he is now working at Microsoft Research on Pex (http://research.microsoft.com/pex).

Comments and Discussions