std::binomial_distribution我在编译clang++(使用标准库)时遇到了一些奇怪的行为libstdc++。
考虑以下简单的程序:
#include <ctime>
#include <random>
#include <iostream>
unsigned binom(unsigned n, double p) {
std::mt19937 e(time(NULL));
std::binomial_distribution<unsigned> b(n, p);
return b(e);
}
int main() {
std::cout << "sample1=" << binom(1073741823, 0.51174692866744709) << "\n";
std::cout << "sample2=" << binom(1073741824, 0.51174692866744709) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
该程序将输出一行 ( sample1=511766586\n),然后无限期挂起。
我是否以某种方式调用了未定义的行为?无论 PRNG 返回什么,这似乎都会发生。无论我如何播种,我main都会坚持第二行。
所以,我正在尝试编写一个函数来递归地构建一个大型复杂的公式。基本上,我希望简单地工作如下:
f <- function(x) {
g <- function(y) y
for( i in 1:4 ) {
h <- g
g <- function(y) h(y)^2
}
g(x)
}
Run Code Online (Sandbox Code Playgroud)
请不要嘲笑这种疯狂的动机。现在我想得到的是一个返回 ((((x^2)^2)^2)^2) 的函数,但实际发生的是我的运行时立即崩溃,可能是因为有某种调用到一个未引用的函数或其他东西,因为我g每次都覆盖表达式(显然我真的不知道 r 在这种情况下是如何工作的)。
我如何才能实现保留旧g参考资料中的信息的想法?
当我学习一门新语言时,我要做的第一件事就是阅读快速傅里叶变换实现并尝试使其工作.这是一个我非常熟悉的算法 - 所以它帮助我理解语言是如何工作的.
目前,我正在阅读Roman Cheplyaka的这一实施.我现在非常密切地遵循算法,一切似乎都按预期工作,但是下面的一段代码为我抛出了一堆错误:(具体来说,该squareMap部分会抛出错误)
evalFourier coeffs pts = do
let
squares = nub $ u_sqr <$> pts -- values of x^2
(even_coeffs, odd_coeffs) = split coeffs
even_values <- evalFourier even_coeffs squares
odd_values <- evalFourier odd_coeffs squares
let
-- a mapping from x^2 to (A_e(x^2), A_o(x^2))
square_map =
Map.fromList
. zip squares
$ zip even_values odd_values
-- evaluate the polynomial at a single point
eval1 :: U -> Writer (Sum Int) (Complex a)
eval1 x = …Run Code Online (Sandbox Code Playgroud)