草庐IT

double-byte

全部标签

c++ - 深度神经网络的图像识别精度,float 还是 double?

用于图像识别的神经网络可能非常庞大。可以有数千个输入/隐藏神经元,数百万个连接什么的会占用大量计算机资源。同时float通常是32位和doublec++64位,它们在速度上没有太大的性能差异,但使用float可以节省一些内存。有一个神经网络正在使用什么sigmoid作为激活函数,如果我们可以选择神经网络中的哪些变量可以是float或double哪个可以float以节省内存而不会使神经网络无法执行?虽然训练/测试数据的输入和输出绝对可以是float因为它们不需要double,因为图像中的颜色可以仅在0-255范围内,当归一化为0.0-1.0比例时,单位值为1/255=0.0039~1。隐

c++ - 在 POSIX 上生成随机 double 的最佳方法是什么?

我想在[0.0,1.0)范围内得到均匀分布如果可能,请让实现使用来自/dev/urandom的随机字节。如果您的解决方案是线程安全的,那就太好了。如果您不确定,请指出。参见somesolution我看了其他答案后想到的。 最佳答案 这似乎是个不错的方法:unsignedshortintr1,r2,r3;//letr1,r2andr3holdrandomvaluesdoubleresult=ldexp(r1,-48)+ldexp(r2,-32)+ldexp(r3,-16);这是基于NetBSD的drand48实现。

C++ -malign-double 编译器标志

我需要一些有关C++编译器标志的帮助。我正在使用一个库,它是从Windows到Linux的端口,必须使用-malign-double标志编译,“为了Win32兼容性”。据我了解,这意味着我也必须用这个标志编译我自己的代码吗?其他.so共享库怎么样,是否也使用此标志重新编译了它们?如果是这样,有什么办法解决这个问题吗?我是一个Linux新手(和C++),所以即使我尝试重新编译我在我的项目中使用的所有库,递归地找到所有库的源代码和它们的库也太复杂了'依赖并重新编译一切。编辑:感谢您的回答。一些背景:这个库控制初始化和访问USB连接的相机。问题是如果没有这个标志,奇怪的事情就会开始发生。看似

c++ - 以二进制形式打印 double

在BruceEckel的“ThinkinginC++”中,给出了一个打印double值的程序以二进制形式。(第3章,第189页)intmain(intargc,char*argv[]){if(argc!=2){cout(&d);for(inti=sizeof(double);i>0;i-=2){printBinary(cp[i-1]);printBinary(cp[i]);}}这里当i=8时打印cp[i](假设double是8个字节),这不是未定义的行为吗?我的意思是这段代码不起作用,因为它不打印cp[0]。 最佳答案 A1:是的,

c++ - timer_create 给出内存泄漏问题 "Syscall param timer_create(evp) points to uninitialised byte(s)"

structsigeventtimerEvent;memset(&timerEvent,0,sizeof(timerEvent));timerEvent.sigev_value.sival_int=0;timerEvent.sigev_value.sival_ptr=diaBase;timerEvent.sigev_notify=SIGEV_THREAD;timerEvent._sigev_un._sigev_thread._function=function;timerEvent._sigev_un._sigev_thread._attribute=NULL;timer_ttimer

c++ - 将位设置为 double 并使用 g++ 的优化标志进行编译

我正在尝试将位设置为double(IEEE标准754)。说我想“构建”一个3,我会设置双浮点表示的第51位和第62位,这样我得到二进制1.1*2,十进制为3。我写了这个简单的main:intmain(){doublet;uint64_t*i=reinterpret_cast(&t);uint64_tone=1;*i=((one这个的输出将是88883当使用g++4.3编译并且没有优化时。但是,如果我添加-O2或-O3优化标志,我会得到一个奇怪的行为。也就是说,如果我让main保持原样,我会得到相同的输出。但是,如果我删除输出4sizeof的行,那么我将得到输出0没有sizeof输出的未

c++ - C中double **和double (*)[2]的区别

double**和double(*)[2]有什么区别。如果我理解得很好,double**是指向double指针的指针,因此它可以是任意大小的二维数组,而double(*)[2]是指向double[2]数组的指针.那么如果是对的,如何才能成功传递给函数。例如:voidpcmTocomplex(short*data,double*outm[2])如果我传递double(*)[2]作为参数,我会收到以下警告:warning:passingargument2of‘pcmTocomplex’fromincompatiblepointertypenote:expected‘double**’but

c++ - 具有 double 、 float 和整数数据类型的英特尔 MKL 矩阵产品性能

我正在试验英特尔MKL库,使用它们提供的Boost::uBLAS接口(interface)(包括mkl_boost_ublas_matrix_prod.hpp)执行矩阵乘法。我的数据只是整数,所以我尝试将我的矩阵模板类型更改为int并且性能下降,这似乎主要是由于代码仅使用单个CPU内核而不是我可用的12个。我在MKL文档中找不到任何内容来解释为什么整数没有使用MKL的OpenMP多线程功能(我猜他们根本没有使用MKL?)。此外,与float相比,我发现double的性能下降了50%。问题:为什么float和double之间存在差异?为什么我不能使用整数?这是我从下面的代码中得到的结果:

c++ - C++ 中 double 和 DOUBLE 的区别

我想知道double之间有什么区别?和DOUBLE(来自#include)在C++中。在Java中有很多关于它的问题,但那是一种完全不同的语言。是DOUBLE只是double的Windows包装类,或者是其他东西?它们有什么不同的优势吗? 最佳答案 double是C++关键字,而DOUBLE是实现定义的typedef。例如,如果我将包含在MSVC++的项目中,IDE显示DOUBLE在WTypesbase.h中定义喜欢:typedefdoubleDOUBLE; 关于c++-C++中doub

c++ - 模板代码中的 float 或 double

下面的例子可能看起来很荒谬,但它是一个更大的高性能代码的一部分,在这个代码中所介绍的技术是有意义的。我提到这一点是为了防止有人怀疑XY问题——很可能不是。我有一个带有模板化/编译时操作数的函数:templateintmul(intx){returnM*x;}现在我想对double做同样的事情,这是-当然-不允许的:template//youcan'tdothat!intmul(doublex){returnM*x;}所以为了在编译时仍然放入double,我只看到以下解决方案://createmyconstantsstructSevenPointFive{staticconstexprd