草庐IT

double-checked-locking

全部标签

c++ - `std::lock_guard<std::mutex>` 对象没有名称时的不同行为

我正在了解std::mutex,std::thread我对下面两段代码的不同行为感到惊讶:#include#include#includeusingnamespacestd;std::mutexmtx;voidfoo(intk){std::lock_guardlg{mtx};for(inti=0;i输出是顺序的。但是如果我不命名变量std::lock_guard,输出是无序的voidfoo(intk){std::lock_guard{mtx};//justerasethenameofvariablefor(inti=0;i好像std::lock_guard在第二种情况下没有用,为什么?

c++ - 如何检查 double 是否有小数部分?

基本上我有两个变量:doublehalfWidth=Width/2;doublehalfHeight=Height/2;因为它们被除以2,所以它们要么是整数,要么是小数。我如何检查它们是整数还是.5? 最佳答案 您可以使用modf,这应该足够了:doubleintpart;if(modf(halfWidth,&intpart)==0){//yourcodehere} 关于c++-如何检查double是否有小数部分?,我们在StackOverflow上找到一个类似的问题:

c++ - 从 double 截断到 float?

#includeusingnamespacestd;intmain(void){floathaha[2];float(&ptr)[2]=haha;ptr[0]=0.54;ptr[1]=0.65;cout我目前正在使用入门C++学习复杂的数组声明,在我的代码中,我收到警告说WarningC4305'=':truncationfrom'double'to'float'Arrayforbothptr[0]和ptr[1]出于某种原因,但我在任何地方都看不到double,但当我将代码修改为ptr[0]=(float)0.54;ptr[1]=(float)0.65;我似乎没有警告谁能解释为什么?提

c++ - x86-64 长 double

longdouble在Intel64位平台上的实际精度是多少?是80位填充到128位还是实际的128位?如果是前者,除了gmp之外,还有其他选择可以实现真正的128精度吗? 最佳答案 x86-64精度与常规x86相同。扩展double为80位,使用x87ISA,添加了6个填充字节。没有128位FP硬件。不过,四精度或扩展四精度的软件实现可能会受益于x86-6464x64=>128整数乘法指​​令。 关于c++-x86-64长double,我们在StackOverflow上找到一个类似的问

c++ - Windows 和 Linux 中 C++ 中 double 的精度位数不同。为什么? Linux显示超过20个非零精度数字

刚刚做了这个:doubleval1=numeric_limits::max();cout.precision(70);cout在Windows中,我在17位数字(小数点后16位数字)后开始得到0。然而在Linux中,当我不断增加cout.precision(NUMBER)时,越来越多的数字不断显示并且它们不是零。此外,运行以下代码在Windows和Linux上都会显示“15”。Windows系统是32位的,Linux系统是64位的,如果有区别的话。typedefstd::numeric_limitsdl;cout谁能帮忙解释一下这是怎么回事?我认为Windows和Linux中的精度位数

c++ - 使用 GCC 和 C++11 实现类型 "long double"

我尝试搜索有关longdouble的信息,到目前为止,我了解到编译器对它的实现有所不同。在Ubuntu(XUbuntu)Linux12.10上使用GCC时,我得到了这个:doublePId=acos(-1);longdoublePIl=acos(-1);std::cout.precision(100);std::cout输出:PId8:3.141592653589793115997963468544185161590576171875PIl16:3.141592653589793115997963468544185161590576171875有人明白为什么他们输出(几乎)相同的东西吗

c++ - 错误 C2296 : '%' : illegal, 左操作数在 C++ 中的类型为 'double'

我必须对双数使用“%”,但在C++中它不起作用。示例:doublex;temp=x%10;我收到这个错误:errorC2296:'%':illegal,leftoperandhastype'double'如何在不将数字从double转换为整数的情况下解决这个问题?如果我转换它,我会丢失小数部分,我不想。还有其他选择吗? 最佳答案 %没有为double定义,但您可以使用fmod代替:ComputeremainderofdivisionReturnsthefloating-pointremainderofnumer/denom(roun

c++ - 错误 : invalid operands to binary % (have 'double' and 'double' )

我正在编写一个程序,其中列出了100,000个素数。它适用于10个数字,但在这么多数字之后它们变成负值。我将整数更改为长整数,但没有任何改变,然后我将它们更改为double,我得到了标题中列出的错误。我的变量应该是什么?请记住,我还是编程新手。我也看了一些以前的帖子,没有看到答案。intis_prime(doublex,chararray[]){//doesntusearraybutIputitintheredoublej=2;//dividerfor(j=2;j 最佳答案 您不能对运算符使用double,您必须使用int。你应该:

c++ - 管理 C++ 单精度和 double 混合计算的规则是什么?

例如,这些变量:result(double)a(double)b(float)c(float)d(double)一个简单的计算:result=a*(b+c)*d如何以及何时转换类型以及如何确定每次计算执行的精度? 最佳答案 所有操作都是在相同类型的对象上完成的(假设是正常的算术运算)。如果您编写的程序使用不同的类型,那么编译器将自动升级ONE参数,使它们相同。在这种情况下,花车将升级为double:result=a*(b+c)*dfloattmp1=b+c;//Plusoperationdoneonfloats.//Sotheres

adb.exe:端口被占用 failed to check server version: protocol fault (couldn‘t read status): connection res

adb用着用着不行了。。然后使用命令行adbdevices就报错。解决方案也很简单。杀死占用5037的程序。然后重启adb先使用adbdevices看下是否报错adbdevices 报错后执行netstat-aon|findstr5307会找到一个进程。针对这个进程可以看下是什么程序tasklist|findstr13440一看是chrome.exe的进程,那么也很简单第一种命令行杀死进程taskkill/pid13440/f第二种Ctrl+Shift +Esc呼出任务管理器杀死chrome即可最后一步重启adbadbstart-server治标不治本啊。下次还会被抢占端口。解决端口占用的方法