草庐IT

floating-point-conversion

全部标签

c++ - “The procedure entry point… could not be located” 在错误的 DLL 中

我已经从Haskell代码创建了一个DLL,我正在从C++调用这个DLL。当我在VisualStudio2010中以Debug模式运行时,我的应用程序工作正常,但是当我制作发布版本并安装它时,出现错误TheprocedureentrypointGetDataChunkcouldnotbelocatedinthedynamiclinklibraryAdvancedMath.dll.AdvancedMath.dll是我基于Haskell的DLL。奇怪的是函数GetDataChunk不在那个DLL中——它在我链接的另一个DLL中,而当我添加HaskellDLL时,那个DLL或我的应用程序对它

c++ - 在 C++ 中说 "promote everything to floating before calculation"的确定性方式

考虑到我更愿意将我的程序中的数字保留为int或任何整数,用这些数字的浮点等价物进行任意算术运算的最方便的方法是什么?说,我有inta,b,c,d;doublex;我想写x=a/b/c/d+c/d+a;通过将转换放在已解析的运算符树叶子中的任何地方,而不会使表达式变得一团糟x=(double)a/b/c/d+(double)c/d+a;C风格的宏是否可行(是否递归)?是否应该使用新类和重载运算符来完成? 最佳答案 x=a/b/c/d+c/d+a;这是一个相当复杂的表达式。最好给它起个名字:doublecomplex_expressio

c++ - 任意精度小数运算中的 float 与有理数 (C/C++)

由于有两种实现AP小数的方法,一种是模拟double数据类型的存储和行为,只是使用更多字节,另一种是使用现有整数将小数表示为有理数的APA实现,即作为一对整数、分子和分母,这两种方式中的哪一种更有可能在性能方面提供高效的算术?(内存使用确实是次要问题。)我知道现有的C/C++库,其中一些库提供带“float”的小数APA,另一些带有理数(但是,它们都不具有定点APA),当然我可以对一个库进行基准测试依赖于“float”实现而不是利用合理实现的实现,但结果在很大程度上取决于我必须从近十个可用库中随机选择的那些特定库的实现细节。因此,我感兴趣的是两种方法(如果考虑定点APA,则为三种方法)

c++ - 缩小从 double 到 float 的转换 : is overflow behaviour guaranteed?

如果我试试这个floatf=(float)numeric_limits::infinity();或者实际上,尝试将任何大于floatmax的值转换为float,我能保证最终得到无穷大吗?它适用于GCC,但它是标准吗? 最佳答案 floatf=(float)numeric_limits::infinity();这保证设置f如果您的编译平台提供用于浮点计算的IEEE754算法(通常会提供),则为无穷大。Orindeed,trytocastanythingbiggerthanfloatmaxdowntoafloat,amIguarante

c++ - 避免舍入错误(特别是 float )c++

http://www.learncpp.com/cpp-tutorial/25-floating-point-numbers/我最近一直在研究C++。虽然我们知道舍入误差的含义,但一般的计算机类(class)教授往往不会讲这些小事。有人可以帮我解决如何避免舍入错误吗?教程显示了示例代码#includeintmain(){usingnamespacestd;cout这输出0.10000000000000001默认情况下,float保持6位精度。因此,当我们覆盖默认值并要求更多(在本例中为17!!)时,我们可能会遇到截断(如教程中所述)。对于double,最高为16。一般而言,优秀的C++

c++ - "float = float - float"中是否存在隐式类型提升?

我们正在使用QA-C来实现MISRAC++一致性,但是该工具会为这样的代码喷出错误:floata=foo();floatb=bar();floatc=a-b;据我所知,这没有隐式类型提升,因为一切都将发生在float大小的block中,但该工具告诉我减法会导致一个。有没有可能存在隐性提升的情况? 最佳答案 这里不涉及隐式提升。当涉及涉及二元运算符的转换时,它们被称为普通算术转换。来自C++标准,[expr]/11:11Manybinaryoperatorsthatexpectoperandsofarithmeticorenumera

c++ - 为什么在 64 位系统上 float 不是 double?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。考虑到int在32位系统上是4个字节,在64位系统上是8个字节,为什么float的处理方式不同?为什么sizeofadouble!=sizeofafloat在64位系统上?考虑到当我声明一个int(导致higherperformance)时选择了最好的native整数类型,float不应该发生同样的事情(这也导致性能提升)?相关问题:声明在32位系统上为

c++ - IEEE Std 754 Floating-Point : let t := a - b, 标准是否保证 a == b + t?

假设t,a,b都是double(IEEEStd754)变量,a,b不是NaN(但可能是Inf)。在t=a-b之后,我一定有a==b+t吗? 最佳答案 绝对不是。一个明显的例子是a=DBL_MAX,b=-DBL_MAX。那么t=INFINITY,所以b+t也是INFINITY。可能更令人惊讶的是,有些情况下会发生这种情况而没有任何溢出。基本上,它们都是a-b不准确的形式。例如,如果a是DBL_EPSILON/4并且b是-1,则a-b为1(假设默认舍入模式),a-b+b则为0。我提到第二个示例的原因是,这是在IEEE算法中强制舍入到特定

c++ - 产生从负到正范围的随机 float ?

我正在尝试使用rand()在-50.0和50.0之间产生一个随机float。我到处寻找答案,但它涉及整数和%运算符。 最佳答案 试试这个:floatRandomNumber(floatMin,floatMax){return((float(rand())/float(RAND_MAX))*(Max-Min))+Min;} 关于c++-产生从负到正范围的随机float?,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - 使用 float 时如何获得一致的程序行为?

我正在编写一个以离散步骤进行的模拟程序。模拟由许多节点组成,每个节点都有一个与之关联的浮点值,该值在每一步都重新计算。结果可以是正数、负数或零。在结果为零或更少的情况下,会发生一些事情。到目前为止,这看起来很简单——我可以为每个节点做这样的事情:if(value然而,在我最近对程序进行了一些更改后,我重新安排了某些计算的完成顺序,因此出现了一个问题。在一个完美的世界中,在重新排列之后这些值仍然会出现相同的结果,但是由于浮点表示的不精确性,它们会出现非常轻微的不同。由于每一步的计算都取决于前一步的结果,因此随着模拟的进行,结果中的这些微小变化会累积成更大的变化。这是一个简单的示例程序,它