Changes in / [183:0c6556a8e105:182:9c6dfb5141d3] in lemon-main
- Files:
-
- 2 edited
-
configure.ac (modified) (1 diff)
-
lemon/random.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
configure.ac
r175 r153 2 2 3 3 dnl Version information. 4 m4_define([lemon_version_number], []) 4 m4_define([lemon_version_major], [0]) 5 m4_define([lemon_version_minor], [99]) 6 m4_define([lemon_version_micro], []) 7 m4_define([lemon_version_nano], []) 8 m4_define([lemon_version_tag], [hg]) 5 9 m4_define([lemon_hg_revision], [m4_normalize(esyscmd([hg id -i]))]) 6 m4_define([lemon_version], [ ifelse(lemon_version_number(), [], [lemon_hg_revision()], [lemon_version_number()])])10 m4_define([lemon_version], [lemon_version_major().lemon_version_minor()ifelse(lemon_version_micro(), [], [], [.lemon_version_micro()])ifelse(lemon_version_nano(), [], [], [.lemon_version_nano()])ifelse(lemon_version_tag(), [], [], lemon_version_tag(), [hg], [[_]lemon_version_tag()[_]lemon_hg_revision()], [[_]lemon_version_tag()])]) 7 11 8 12 AC_PREREQ([2.59]) -
lemon/random.h
r178 r116 67 67 #include <vector> 68 68 #include <limits> 69 #include <fstream>70 69 71 70 #include <lemon/math.h> 72 71 #include <lemon/dim2.h> 73 74 #ifndef WIN3275 #include <sys/time.h>76 #include <ctime>77 #include <sys/types.h>78 #include <unistd.h>79 #else80 #include <windows.h>81 #endif82 72 83 73 ///\ingroup misc … … 537 527 public: 538 528 539 ///\name Initialization540 ///541 /// @{542 543 ///\name Initialization544 ///545 /// @{546 547 529 /// \brief Default constructor 548 530 /// … … 613 595 } 614 596 615 /// \brief Seeding from file or from process id and time616 ///617 /// By default, this function calls the \c seedFromFile() member618 /// function with the <tt>/dev/urandom</tt> file. If it does not success,619 /// it uses the \c seedFromTime().620 /// \return Currently always true.621 bool seed() {622 #ifndef WIN32623 if (seedFromFile("/dev/urandom", 0)) return true;624 #endif625 if (seedFromTime()) return true;626 return false;627 }628 629 /// \brief Seeding from file630 ///631 /// Seeding the random sequence from file. The linux kernel has two632 /// devices, <tt>/dev/random</tt> and <tt>/dev/urandom</tt> which633 /// could give good seed values for pseudo random generators (The634 /// difference between two devices is that the <tt>random</tt> may635 /// block the reading operation while the kernel can give good636 /// source of randomness, while the <tt>urandom</tt> does not637 /// block the input, but it could give back bytes with worse638 /// entropy).639 /// \param file The source file640 /// \param offset The offset, from the file read.641 /// \return True when the seeding successes.642 #ifndef WIN32643 bool seedFromFile(const std::string& file = "/dev/urandom", int offset = 0)644 #else645 bool seedFromFile(const std::string& file = "", int offset = 0)646 #endif647 {648 std::ifstream rs(file.c_str());649 const int size = 4;650 Word buf[size];651 if (offset != 0 && !rs.seekg(offset)) return false;652 if (!rs.read(reinterpret_cast<char*>(buf), sizeof(buf))) return false;653 seed(buf, buf + size);654 return true;655 }656 657 /// \brief Seding from process id and time658 ///659 /// Seding from process id and time. This function uses the660 /// current process id and the current time for initialize the661 /// random sequence.662 /// \return Currently always true.663 bool seedFromTime() {664 #ifndef WIN32665 timeval tv;666 gettimeofday(&tv, 0);667 seed(getpid() + tv.tv_sec + tv.tv_usec);668 #else669 FILETIME time;670 GetSystemTimeAsFileTime(&time);671 seed(GetCurrentProcessId() + time.dwHighDateTime + time.dwLowDateTime);672 #endif673 return true;674 }675 676 /// @}677 678 ///\name Uniform distributions679 ///680 /// @{681 682 597 /// \brief Returns a random real number from the range [0, 1) 683 598 /// … … 708 623 return real<Number>() * (b - a) + a; 709 624 } 710 711 /// @}712 713 ///\name Uniform distributions714 ///715 /// @{716 625 717 626 /// \brief Returns a random real number from the range [0, 1) … … 771 680 return _random_bits::IntConversion<Number, Word>::convert(core); 772 681 } 773 774 /// @}775 682 776 683 unsigned int uinteger() { … … 802 709 return bool_producer.convert(core); 803 710 } 804 805 /// @}806 711 807 712 ///\name Non-uniform distributions
Note: See TracChangeset
for help on using the changeset viewer.

