Random number generator now works with size_t
git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@869 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
@@ -63,12 +63,12 @@ namespace OpenMesh {
|
|||||||
|
|
||||||
//== IMPLEMENTATION ===========================================================
|
//== IMPLEMENTATION ===========================================================
|
||||||
|
|
||||||
RandomNumberGenerator::RandomNumberGenerator(const double _resolution) :
|
RandomNumberGenerator::RandomNumberGenerator(const size_t _resolution) :
|
||||||
resolution_(_resolution),
|
resolution_(_resolution),
|
||||||
iterations_(1),
|
iterations_(1),
|
||||||
maxNum_(RAND_MAX + 1.0)
|
maxNum_(RAND_MAX + 1.0)
|
||||||
{
|
{
|
||||||
double tmp = resolution_;
|
double tmp = double(resolution_);
|
||||||
while (tmp > (double(RAND_MAX) + 1.0) ) {
|
while (tmp > (double(RAND_MAX) + 1.0) ) {
|
||||||
iterations_++;
|
iterations_++;
|
||||||
tmp /= (double(RAND_MAX) + 1.0);
|
tmp /= (double(RAND_MAX) + 1.0);
|
||||||
@@ -91,7 +91,7 @@ double RandomNumberGenerator::getRand() const {
|
|||||||
return randNum / maxNum_;
|
return randNum / maxNum_;
|
||||||
}
|
}
|
||||||
|
|
||||||
double RandomNumberGenerator::resolution() const {
|
size_t RandomNumberGenerator::resolution() const {
|
||||||
return maxNum_;
|
return maxNum_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <OpenMesh/Core/System/config.h>
|
#include <OpenMesh/Core/System/config.h>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//== NAMESPACES ===============================================================
|
//== NAMESPACES ===============================================================
|
||||||
@@ -68,6 +70,7 @@ namespace OpenMesh {
|
|||||||
|
|
||||||
|
|
||||||
/** Generate a random number between 0.0 and 1.0 with a guaranteed resolution
|
/** Generate a random number between 0.0 and 1.0 with a guaranteed resolution
|
||||||
|
* ( Number of possible values )
|
||||||
*
|
*
|
||||||
* Especially useful on windows, as there MAX_RAND is often only 32k which is
|
* Especially useful on windows, as there MAX_RAND is often only 32k which is
|
||||||
* not enough resolution for a lot of applications
|
* not enough resolution for a lot of applications
|
||||||
@@ -80,20 +83,20 @@ public:
|
|||||||
*
|
*
|
||||||
* @param _resolution specifies the desired resolution for the random number generated
|
* @param _resolution specifies the desired resolution for the random number generated
|
||||||
*/
|
*/
|
||||||
RandomNumberGenerator(const double _resolution);
|
RandomNumberGenerator(const size_t _resolution);
|
||||||
|
|
||||||
/// returns a random double between 0.0 and 1.0 with a guaranteed resolution
|
/// returns a random double between 0.0 and 1.0 with a guaranteed resolution
|
||||||
double getRand() const;
|
double getRand() const;
|
||||||
|
|
||||||
double resolution() const;
|
size_t resolution() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/// desired resolution
|
/// desired resolution
|
||||||
const double resolution_;
|
const size_t resolution_;
|
||||||
|
|
||||||
/// number of "blocks" of RAND_MAX that make up the desired _resolution
|
/// number of "blocks" of RAND_MAX that make up the desired _resolution
|
||||||
unsigned int iterations_;
|
size_t iterations_;
|
||||||
|
|
||||||
/// maximum random number generated, which is used for normalization
|
/// maximum random number generated, which is used for normalization
|
||||||
double maxNum_;
|
double maxNum_;
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ update_buffer(VHierarchyNodeHandle _node_handle)
|
|||||||
if (buffer_[none_zero_pos] != 0) break;
|
if (buffer_[none_zero_pos] != 0) break;
|
||||||
}
|
}
|
||||||
window_max_ = buffer_min_ + none_zero_pos + 1;
|
window_max_ = buffer_min_ + none_zero_pos + 1;
|
||||||
for(none_zero_pos=0; none_zero_pos < buffer_size(); ++none_zero_pos)
|
for(none_zero_pos=0; none_zero_pos < int(buffer_size()); ++none_zero_pos)
|
||||||
{
|
{
|
||||||
if (buffer_[none_zero_pos] != 0) break;
|
if (buffer_[none_zero_pos] != 0) break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user