如何在macos中获得drand48_r
How to get drand48_r in macos?
我确实需要使用drand48_r生成器,但macosx中似乎没有。我已经寻找答案有一段时间了,但我唯一学到的是没有答案。但我需要它是线程安全的,所以有什么办法可以自己写吗?会是吗
struct drand48_data
{
unsigned short int __x[3]; /* Current state. */
unsigned short int __old_x[3]; /* Old state. */
unsigned short int __c; /* Additive const. in congruential formula. */
unsigned short int __init; /* Flag for initializing. */
unsigned long long int __a; /* Factor in congruential formula. */
};
double drand48_r (unsigned short *_x) {
return erand48(_x);
}
主要是:
// declare state struct for drand48
drand48_data* _drand_structs = new drand48_data[omp_get_num_threads()];
#pragma omp parallel
cout << "Hello, World from " << omp_get_thread_num() << "/" << omp_get_num_threads() << " Random:" << (2.0 * drand48_r(_drand_structs[omp_get_thread_num()].__x) - 1) << endl;
return 0;
但drand_48总是返回-1。它怎么了,有什么想法吗?
在并行区域外调用omp_get_num_threads()
总是返回1,因为只有一个线程(主线程)在这些区域外执行代码。您应该使用omp_get_max_threads()
。初始化__x
成员也是一个好主意。srand48(seed)
的等价物是:
.__x[0] = 0x330E;
.__x[1] = (unsigned short)(seed & 0xffff);
.__x[2] = (unsigned short)(seed >> 16);
除此之外, 如果您需要在每个线程中支持不同的常量,那么您可能应该直接从GLIBC复制drand48_r()
是drand48()
的可重入版本。请注意,可重入性与线程安全性drand48_r()
的实现。
相关文章:
- node-gyp 在 macOS 上未正确链接库
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- macOS 上的 openvino 构建问题
- 为什么 __gcd() 在 macOS mojave 中抛出错误?
- 如何在 macOS 卡塔琳娜上解决此错误?
- 在macOS Mojave上发布BOOST unit_test_framework/Google测试
- 在 macOS 上安装 clang_complete
- 从macOS Catalina上的源代码编译LLVM(如何解决未找到"stdio.h")
- 在macOS Mojave上尝试OpenCV视频捕获时"Abort Trap: 6"
- 在 macOS 中使用 C/C++ 设置鼠标光标图像
- 链接器命令失败,macOS 上的退出代码为 1(使用 -v 查看调用)
- 如何在macOS上使用Makefile?
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 仅在 MacOS 上析构函数的未定义符号
- 通过自制软件(macOS)安装的clang++:编译错误
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>