std::mt19937
является типом определения std::mersenne_twister_engine
.Должен ли я использовать свои собственные параметры шаблона для последнего, если я переключаюсь между различными значениями точности с плавающей точкой в моей выборке?Если да, то как?
Прямо сейчас у меня есть что-то вроде
#include <random>
#include <iostream>
int main()
{
using float_type = double;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<float_type> dis(1.0, 2.0);
for (int n = 0; n < 1e6; ++n) {
std::cout << dis(gen) << ' ';
}
std::cout << '\n';
}
, но когда я переключаю using float_type = double;
на using float_type = float;
, ускорения не так много.На самом деле, в каком-то другом коде, который у меня есть, использование float
на самом деле намного медленнее!
Вот make-файл, если это поможет.Я использовал time ./prog
после компиляции с make
в качестве грубого таймера, и я использую Ubuntu 18.04.2 LTS, а мой процессор - процессор Intel® Xeon® E3-1241 v3 @ 3,50 ГГц × 8.
PROG = prog
SRCS = main.cpp
OBJS = main.o
CXX = g++
CXXFLAGS = -std=c++11 -O3 $(INCLUDES) -pg
all: $(PROG)
$(PROG): $(OBJS)
$(CXX) -o $@ $(OBJS)
main.cpp :
$(CXX) $(CXXFLAGS) -c
main.o : main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp
.PHONY: clean
clean:
rm -f $(PROG) $(OBJS)