草庐IT

Double-precision_floating-point_f

全部标签

c++ - 着色器中自己的 double cos() 实现的结果是 NaN,但在 CPU 上运行良好。出了什么问题?

正如我所说,我想在带有GLSL的计算着色器中实现我自己的doublecos()函数,因为浮点只有一个内置版本。这是我的代码:doublefaculty[41];//valuesarecalculatedatthebeginningofmain()doublemyCOS(doublex){doublesum,tempExp,sign;sum=1.0;tempExp=1.0;sign=-1.0;for(inti=1;i此代码的结果是,总和在着色器上为NaN,但在CPU上算法运行良好。我也尝试调试这段代码,得到以下信息:faculty[i]对于所有条目都是正数且不为零每一步的tempExp都

c++ - double 到 string 到 double 的转换抛出异常

以下代码在VisualStudio2013中引发了std::out_of_range异常,我认为它不应该:#include#includeintmain(intargc,char**argv){doublemaxDbl=std::stod(std::to_string(std::numeric_limits::max()));return0;}我也用gcc4.9.2测试了代码,它没有抛出异常。该问题似乎是由转换为字符串后不准确的字符串表示引起的。在VisualStudio中std::to_string(std::numeric_limits::max())产量1797693134862

c++ - boost 序列化和 double

我正在尝试使用boost序列化库将一个类序列化为一个字符串,我的类中包含几个double成员变量。下面是我用来序列化的代码:#include#include#includestd::stringstreamss;boost::archive::text_oarchiveoa(ss);oa这是我的Point类中的序列化方法:friendclassboost::serialization::access;templatevoidserialize(Archive&ar,constunsignedintversion){if(version>0){ar&mLatitude;ar&mLongi

c++ - 将 GLSL 转换为 C++ float/vec3?

这一行到底做了什么ra.rgb*ra.w/max(ra.r,1e-4)*(bR.r/bR);我比较困惑的地方是怎么翻译(bR.r/bR);一个float除以一个vec3?我想将其转换为C++,但返回一个float除以vector的所有元素是什么?等等(无法访问显卡以检查?) 最佳答案 这是一个组件划分的例子,它的工作原理如下:GLSL4.40Specification-5.9表达式-pp.101-102Ifthefundamentaltypesintheoperandsdonotmatch,thentheconversionsfro

c++ - 与 Mathematica 相比,C++ 中的 float 学舍入很奇怪

下面的帖子已经解决了,这个问题是因为对http://www.cplusplus.com/reference/random/piecewise_constant_distribution/上的公式解释错误导致的强烈建议读者考虑页面:http://en.cppreference.com/w/cpp/numeric/random/piecewise_constant_distribution我有以下奇怪的现象让我很困惑!:我有一个分段常数概率密度,如下所示usingRandomGenType=std::mt19937_64;RandomGenTypegen(51651651651);usin

c++ - 在 std set/map 中使用 double 作为键的方法

在映射/集合中使用double作为键的问题是浮点精度。有些人建议在您的比较函数中添加一个epsilon,但这意味着您的键将不再满足必要的严格弱排序标准。这意味着您将根据插入元素的顺序获得不同的集合/映射。如果您想基于double值聚合/组合/合并数据,并愿意允许一定程度的舍入/epsilon(显然,您必须这样做),那么以下解决方案是个好主意?将所有double(我们打算用作键)转换为整数,方法是将它们乘以精度因子(例如1e8)并四舍五入到最接近的整数(int)i+0.5(如果i>0),然后创建一个集合/映射来关闭这些整数。提取键的最终值时,将整数除以精度因子以获得double值(尽管四

c++ - 如何确定 float 的上限和下限?

我对下面的引述(N3797,3.9.1/8)有疑问:Thevaluerepresentationoffloating-pointtypesisimplementation-defined.据我所知,它在定义float的边界方面给予了实现完全的自由。它们在templateclassnumeric_format中指定.例如,#include#includeintmain(){std::cout().max()().min()().max()().min()DEMO我的问题是:float的上限和下限可以任意高低,还是有限制?纯C是否也为float提供一组实现定义的值?我怀疑这取决于我们正在使

c++ - 访问静态 constexpr float 成员时 undefined reference

此代码有效:structBlob{staticconstexprinta=10;};intmain(){Blobb;autoc=b.a;}但是如果我将int更改为float我会得到一个错误:structBlob{staticconstexprfloata=10.0f;};/tmp/main-272d80.o:Infunctionmain':main.cpp:(.text+0xe):undefinedreferencetoBlob::a'为什么我不能以这种方式使用constexprfloat?编译器:Ubuntuclang版本3.5.0-4ubuntu2(tags/RELEASE_350

C++ float vs double cout setprecision 奇怪之处(新手)

谁能解释为什么当我使用setprecision()时这两个相同值的变量可以输出不同的值?#include#includeintmain(){floata=98.765;doubleb=98.765;//std::couta的输出将为98.76,而b的输出将为98.77。 最佳答案 那些变量不具有相同的值。当您将98.765的字面值double硬塞进float时,它必须进行最佳匹配,并且会损失一些精度。如果将精度更改为50,您可以很容易地看到这一点,您还会看到即使是double也不能准确表示该值:98.7649993896484375

c++ - C++ 中的异常处理 : Throwing a double when using "throw(int)"

下面的程序总是输出“Error:double10.2”。我不明白为什么。根据我的说法,如果fun1()只允许抛出int,那么程序应该要么(1)崩溃(2)或者把double改成int然后throw。这意味着,输出应该是“Error:int10”。然而,情况并非如此。谁能解释一下??voidfun1()throw(int){cout 最佳答案 您的编译器不符合标准。根据标准,您的程序应以调用std::unexpected结束。在让double异常转义fun1之后。也就是说-不要使用异常规范。它们已被弃用且无用。