0.0과 1.0 사이의 Uniform_real_distribution은 C ++에서 항상 0에 가까운 매우 낮은 숫자를 생성합니다.

보 페루 빛 84

클래스 내에서 클래스의 속성이되는 난수를 생성하는 메서드를 구현하려고합니다. 개체 생성자 내에서 randomPropertyGenerator 메서드를 호출하고 있습니다.

문제를 재현하기위한 최소 코드는 다음과 같습니다.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <random>
using namespace std;

class Object {
    public:
        double randomProp;
        double randomPropGen(double a, double b);
        Object() {
            double randomProp = randomPropGen(0.0, 1.0);
        }
};

double Object::randomPropGen(double min, double max){
    std::uniform_real_distribution<double> distribution(min, max);
    std::random_device rd;
    std::default_random_engine generator(rd());
    return distribution(generator);
}

int main(int argc, char *argv[]){
    std::uniform_real_distribution<double> distribution(0.0, 1.0);
    std::random_device rd;
    std::default_random_engine generator(rd());
    
    Object o = Object();
    for (int i = 0; i < 10; i++){
        double randomProp2 = distribution(generator);
        cout << "This is randomProp from object " << o.randomProp << endl;
        cout << "This is randomProp2 inside main " << randomProp2 << endl;
        cout << "\n" << endl;
    }
    return 0;
}

코드를 컴파일하고 실행하면 다음과 같은 결과가 나타납니다.

This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.688014


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.263372


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.689736


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.392283


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.96836


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.401998


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.91537


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.608586


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.168815


This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.631994

보시다시피 내 클래스의 메서드 내에서 생성 될 때 randomProp은 항상 동일하고 항상 0에 매우 가까운 것처럼 보이지만 기본 클래스에서 생성 된 randomProp이 더 의미가 있습니다. 누군가 내가 뭘 잘못하고 있고 어떻게 고칠 수 있는지 말해 줄 수 있습니까? 당신의 도움을 주셔서 감사합니다!

가장 큰 _prime_is_463035818

생성자에서 :

Object() {
    double randomProp = randomPropGen(0.0, 1.0);
}

라는 지역 변수를 선언하고 초기화합니다 randomProp. 이 지역 변수는 생성자 내부에만 존재합니다. 동일한 이름의 구성원이 있지만 두 개의 별개 개체이므로 구성원이 uninitialzed입니다. 이니셜 라이저 목록에서 멤버를 초기화 할 수 있습니다.

Object() : randomProp(randomPropGen(0.0,1.0) {
}

기억해야 할 간단한 규칙은 다음과 같습니다. 멤버는 생성자 본문에서 초기화되지 않습니다 (대신 멤버 이니셜 라이저 목록 또는 기본 이니셜 라이저, 여기 참조 ).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관