草庐IT

malign-double

全部标签

两个 double 值的c++比较无法正常工作

这个问题在这里已经有了答案:Howdangerousisittocomparefloatingpointvalues?(12个回答)关闭8年前。看看这段代码:#include#includeusingnamespacestd;classSphere{doubler;public:doubleV()const{return(4/3)*3.14*pow(r,3);}boolequal(constSphere&s)const{cout输出是84.78==84.78:0这意味着相同的方法不会每次都返回相同的值,即使所有参数都是静态的?但是如果我在V()方法定义中写3.0而不是3.14,像这样:

c++ - 将 int64_t 转换为 double

int64_ta=1234;doubled=(double)a;这是推荐的方式吗? 最佳答案 使用static_cast作为临时答案。我建议反对使用隐式转换(甚至是C++源代码中的C样式转换),原因如下:隐式转换是编译器警告的常见来源,这意味着您可能会在构建中添加噪音(现在或稍后添加更好的警告标志时)。您身后的下一位维护程序员将看到一个隐式转换,并且需要知道这是故意行为还是错误/错误。拥有那个static_cast会让你的意图立即显而易见。static_cast和其他C++风格的转换很容易被grep处理。

c++ - 将 STL complex<double> 转换为 fftw_complex 的问题

FFTW手册says它的fftw_complex类型与std::complex位兼容STL中的类。但这对我不起作用:#include#includeintmain(){std::complexx(1,0);fftw_complexfx;fx=reinterpret_cast(x);}这给了我一个错误:error:invalidcastfromtype‘std::complex’totype‘double[2]’我做错了什么? 最佳答案 fftw_complex与C99和C++复杂类型的位兼容性背后的想法不是它们可以很容易地相互创建,

c++ - 在 C++ 中使用 boost::lexical_cast 将 double 转换为字符串?

我想使用lexical_cast将float转换为字符串。通常它工作正常,但我对没有小数的数字有一些问题。如何修复字符串中显示的小数位数?例子:doublen=5;stringnumber;number=boost::lexical_cast(n);结果编号是5,我需要编号5.00。 最佳答案 来自boostlexical_cast的文档:Formoreinvolvedconversions,suchaswhereprecisionorformattingneedtightercontrolthanisofferedbythedef

c++ - double 的 printf 舍入行为

有人可以解释这种行为吗?我很清楚float的机器级表示。这似乎与printf及其格式有关。这两个数字都用浮点表示法精确表示(检查:乘以64得到一个整数)。#include#includeusingnamespacestd;intmain(){doublex1=108.765625;printf("%34.30f\n",x1);printf("%9.5f\n",x1);printf("%34.30f\n",x1*64);doublex2=108.046875;printf("%34.30lf\n",x2);printf("%9.5f\n",x2);printf("%34.30f\n",x

c++ - 在 C++ 中从文本文件中读取数值的最快方法(在这种情况下为 double )

目前,我的代码是这样的:voidReadFile(doubleCst[][1000],char*FileName,intheight)FILE*ifp;doublevalue;intnRead=0;intmRead=0;//openthefile,checkifsuccessfulifp=fopen(FileName,"r");if(ifp==NULL){...}for(nRead=0;nRead我可以进行哪些更改以使其最快? 最佳答案 Boost.Spirit.QI附带benchmark比较std::atof、std::strto

c++ - 为什么 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?

以下代码:std::arrayarr1;std::arrayarr2;...用gcc和clang编译因为std::array::size被认为是constexpr。但以下内容不能用gcc(版本5.3.020151204)编译:std::array,4>arr1;std::array,arr1.size()>arr2;对我来说,如果第一个代码有效,则没有理由编译失败,但由于我没有找到很多关于此的帖子,我不知道它是否是gcc错误或clang扩展?gcc的错误(我不太明白...):main.cpp:Infunction'intmain()':main.cpp:6:46:error:callt

c++ - 为最大 double 值建模无穷大

问题是关于在C++中为double数据类型建模无穷大。我需要它在一个头文件中,所以我们不能使用像numeric_limits这样的函数。是否有定义的常数代表最大值? 最佳答案 float(例如double)实际上可以保持正无穷和负无穷。常量INFINITY应该在你的math.h头文件中。去标准潜水,发现文字:4ThemacroINFINITYexpandstoaconstantexpressionoftypefloatrepresentingpositiveorunsignedinfinity,ifavailable;elsetoa

c++ - SIMD 和压缩和标量 double 之间的区别

在实现SIMD支持时,我正在阅读英特尔的内在函数指南。我有一些困惑,我的问题如下。__m128_mm_cmpeq_ps(__m128a,__m128b)文档说它用于比较压缩的单精度float。“打包”是什么意思?我是否需要以某种方式打包我的浮点值才能使用它们?对于double,有像_mm_cmpeq_sd这样的内在函数,这意味着比较“较低”的double浮点元素。低位和高位double元素是什么意思?我可以使用它们来比较C++double类型元素的vector吗?还是我需要在比较它们之前以某种方式处理它们? 最佳答案 在SSE中,1

c++ - C++ 如何处理引用 int 的 const double&?

今天早上我正在编写一些模板代码,我使用BOOST_STATIC_ASSERT来确保我没有创建对错误类型的引用,因为我认为这可能是一个更清晰的错误消息。但是,当我尝试删除静态断言以查看替代编译器错误时,我震惊地发现当您尝试使constdouble&引用int时gcc甚至没有提示:#includeintmain(){intx=5;constdouble&y=x;std::cout编译,甚至不警告:$g++~/stuff/badRef.cpp-Wall-Wextra-pedantic$a.out5这里发生了什么?这是未定义的行为吗?如果是这样,为什么gcc不提示?在我的机器上,int是4个字