草庐IT

double-submit-prevention

全部标签

c++ - double 的有效小数位数?

C/C++标准对double的最小有效十进制数字有什么保证??C++标准实际上在§18.3.2.4/10的脚注中说这相当于DBL_DIG如C标准中定义的那样。但是我在C标准中找不到任何关于最小值的信息。那么,以下其中一项的最小值是多少?std::numeric_limits::digits10DBL_MANT_DIG编辑:不,DBL_DIG 最佳答案 你不会在C++标准中找到它,因为C++在这个标准上遵循C标准。对于十进制数字,最小值为:FLT_DIG6DBL_DIG10LDBL_DIG10因此,float为6位,double和lo

c++ - 为什么关于未初始化变量的 g++ 警告取决于变量的类型? (它警告一个 int 但不是一个 double)

我目前正在尝试了解g++在哪些情况下会警告未初始化的变量。考虑以下代码:#includetypedefdoublebarType;structfoo{barTypebar;};intmain(){foof;std::cout如果我像这样编译它,我不会收到任何警告:$g++-O1-Walltest.cc-otest但如果我将barType更改为int:$g++-O1-Walltest.cc-otesttest.cc:Infunction‘intmain()’:test.cc:17:warning:‘f.foo::bar’isuseduninitializedinthisfunction警

c++ - 从 unsigned long long 转换为 double ,反之亦然会改变值

在编写C++代码时,我突然意识到我的数字被错误地从double转换为unsignedlonglong。具体来说,我使用如下代码:#define_CRT_SECURE_NO_WARNINGS#include#includeusingnamespacestd;intmain(){unsignedlonglongull=numeric_limits::max();doubled=static_cast(ull);unsignedlonglongull2=static_cast(d);coutIdeoneliveexample.当这段代码在我的电脑上执行时,我有以下输出:18446744073

c++ - 如何提取 double 的尾数

我想将double的尾数存储在一个变量中我发布了一个代码来获取double的二进制表示:clickhere我应该改变什么来隔离尾数 最佳答案 在doublefrexp(doublevalue,int*exp)将VALUE分解为指数和尾数。doubleldexp(doublevalue,intexp)反之。要获得一个整数值,您必须将frexp的结果乘以FLT_RADIX指数DBL_MANT_DIG(这些在中可用。要将其存储在整数变量中,您还需要找到一个合适的类型(通常是64位类型)如果您想处理某些实现提供的128位长double,则需

带 double 的 C++ 可变参数模板

以下代码#include#includetemplateconststd::vector*make_from_ints(intargs...){returnnewstd::vector(std::initializer_list{args});}正在正确编译(使用GCC6.3,在Debian/Sid/x86-64上),我希望它能像这样的调用autovec=make_from_ints(1,2,3);返回一个指向包含1、2、3的整数vector的指针。但是,如果我将int替换为double,那就是如果我添加以下内容(在同一个basiletemplates.cc文件中.......)代码:

c++ - 为什么类型 const double 没有被 lambda 从到达范围捕获,但 const int 是?

我似乎不明白为什么下面的constint类型的代码会编译:intmain(){usingT=int;constTx=1;autolam=[](Tp){returnx+p;};}$clang++-clambda1.cpp-std=c++11$虽然这个类型为constdouble的不是:intmain(){usingT=double;constTx=1.0;autolam=[](Tp){returnx+p;};}$clang++-clambda2.cpp-std=c++11lambda1.cpp:5:32:error:variable'x'cannotbeimplicitlycapture

c++ - 使用 cout 以精度 4 打印 double

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:ConvertadoubletofixeddecimalpointinC++假设,我有doublea=0并且我想将其打印为0.0000。我试过了:cout.precision(4);cout但它给出了0作为输出。 最佳答案 试试吧:#include...cout见here. 关于c++-使用cout以精度4打印double,我们在StackOverflow上找到一个类似的问题: htt

C++:将 double 转换为字符串的最佳方法是什么?

实现这一目标的最最佳方法是什么?voidfoo(doublefloatValue,char*stringResult){sprintf(stringResult,"%f",floatValue);} 最佳答案 我相信有人会说boost::lexical_cast,所以如果你使用boost,那就去吧,但无论如何它基本上是一样的:#include#includestd::stringdoubleToString(doubled){std::ostringstreamss;ss请注意,您可以轻松地将其制作成一个模板,该模板适用于任何可以流

c++ - 用 const : Different treatment for int and double 初始化 constexpr

这个问题在这里已经有了答案:Constantexpressioninitializerforstaticclassmemberoftypedouble(2个回答)关闭2年前。以下代码编译失败liveonIdeone:#includeusingnamespacestd;intmain(){constdoublekPi=3.14;constexprdoublekPi2=2.0*kPi;cout错误信息是:prog.cpp:Infunction'intmain()':prog.cpp:6:30:error:thevalueof'kPi'isnotusableinaconstantexpres

c++ - 如何在避免未定义行为的同时将任意 double 转换为整数?

假设我有一个接受64位整数的函数,我想调用它与double具有任意数值(即它可能非常大量级,甚至无限):voidDoSomething(int64_tx);doubled=[...];DoSomething(d);C++11标准中[conv.fpint]的第1段是这样说的:Aprvalueofafloatingpointtypecanbeconvertedtoaprvalueofanintegertype.Theconversiontrun-cates;thatis,thefractionalpartisdiscarded.Thebehaviorisundefinedifthetrun