Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Różne metody losowania dużych liczb

Ostatnio zmodyfikowano 2013-08-07 18:21
Autor Wiadomość
rd26dett
Temat założony przez niniejszego użytkownika
» 2013-08-07 14:38:49
Poddaje się. Nie potrafię tego zainstalować. Czy mógłby mi ktoś pomóc w tym?
P-89683
pekfos
» 2013-08-07 15:29:03
Chyba prościej zainstalować nowszy kompilator i użyć biblioteki standardowej. Skoro masz tak stary, to i tak go w końcu zmienisz (btw, sprawdzałeś z flagą -std=c++11 (zakładam, że masz GCC)?)
Co do boosta: Na ogół wystarczy skopiować nagłówki do odpowiedniego folderu kompilatora. Jeśli trzeba będzie kompilować, na stronie boosta jest wszystko opisane.
P-89686
jankowalski25
» 2013-08-07 15:29:37
( rand() * rand() ) % 1000000
P-89687
rd26dett
Temat założony przez niniejszego użytkownika
» 2013-08-07 15:40:11
Dziękuje Wam bardzo. jakowalski25, zdaje się że działa poprawnie. Jesteś pewien że teraz liczby będą z całego zakresu (tj. 1-1 000 000)?
Pekfos, jaki kompilator polecasz? Dobrze by było gdyby był darmowy.
P-89689
pekfos
» 2013-08-07 15:41:04
Taki jak Twój, tylko nowszy.
P-89691
Monika90
» 2013-08-07 16:20:08
@rd26
nie rozpoznaje komendy "#include <boost/random.hpp>
A czy rozpoznaje #include <random> po dodaniu flagi -std=c++11 ?

@jankowalski
( rand() * rand() ) % 1000000
To nie jest rozkład jednostajny.

@rd26
Jeżeli już się uparłeś na używanie rand(), to już podałam rozwiązanie:
( rand() *( RAND_MAX + 1 ) + rand() ) % 1000000 + 1
P-89696
rd26dett
Temat założony przez niniejszego użytkownika
» 2013-08-07 17:34:05
Proszę o wyrozumiałość, ale jestem samoukiem nie rozumiem pojęcia flaga. Jeżeli chcę aby losowanie było wypełni poprawne muszę użyć biblioteki #include <random>?
Gdy próbuje takową zadeklarować Code::Blocks pokazuje mi taki komunikat:
C/C++
// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.

// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// <http://www.gnu.org/licenses/>.

/** @file bits/c++0x_warning.h
*  This is an internal header file, included by other library headers.
*  Do not attempt to use it directly. @headername{iosfwd}
*/

#ifndef _CXX0X_WARNING_H
#define _CXX0X_WARNING_H 1

#ifndef __GXX_EXPERIMENTAL_CXX0X__
#error This file requires compiler and library support for the \
 ISO C++ 2011 standard. This support is currently experimental, and must be \
 enabled with the -std=c++11 or -std=gnu++11 compiler options.
#endif

#endif
Rozumiem, że powinienem pobrać nowsza wersje kompilatora GNU?


Zaznaczyłem w opcjach kompilatora "[-std=c++11]". Code::Blocks już nie wyświetla powyższego komunikatu, lecz program nadal pokazuje liczby tylko do 30 kilku tysięcy.
P-89699
Monika90
» 2013-08-07 18:15:36
To się samo nie zrobi, musisz zmienić program, przykładowo:
C/C++
std::default_random_engine rnd( std::time( NULL ) );
std::uniform_int_distribution < int > distr( 1, 1000000 );
for( int i = 0; i < 1000; ++i )
     std::cout << distr( rnd ) << std::endl;

P-89701
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona