Click here to Skip to main content
15,881,898 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.3K   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.
// PGLLineVer.h: interface for the CPGLLineVer class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PGLLINEVER_H__469C5D6F_CF3F_436F_BADE_BBA9620146D4__INCLUDED_)
#define AFX_PGLLINEVER_H__469C5D6F_CF3F_436F_BADE_BBA9620146D4__INCLUDED_

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

#include "PGLLine.h"

/*! \brief A vertical line.

\ingroup PGLLineGroup
*/
class PGL_EXT_CLASS CPGLLineVer : public CPGLLine 
{
public:
    DECLARE_SERIAL(CPGLLineVer);

	//! Default construtor
	CPGLLineVer();
	//! copy constructor
	CPGLLineVer(const CPGLLineVer& lv);
	//! assignement constructor
	CPGLLineVer& operator = (const CPGLLineVer& lv);
    //! returns a pointer to a copy of the object
    virtual CPGLObject* MakeCopy()
    {   CPGLObject* pCopy=new CPGLLineVer(*this); return pCopy; };
	//! Default destructor
	virtual ~CPGLLineVer();
	
	//! Sets horizontal position
	void SetX(double X) {	m_dX = X;};
	//! Returns horizontal position
	double GetX() const {	return m_dX;};
	//! 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_dX;
	//! Caption
	CPGLText m_tCaption;
	//@}
};

#endif // !defined(AFX_PGLLINEVER_H__469C5D6F_CF3F_436F_BADE_BBA9620146D4__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