草庐IT

浮点数二分

全部标签

c++ - SSE 内在函数导致正常的浮点运算返回 -1.#INV

我在编写执行音频处理的SSE方法时遇到问题。我在这里根据英特尔的论文实现了一个SSE随机函数:http://software.intel.com/en-us/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor/我还有一个方法也使用SSE执行从Float到S16的转换,转换执行起来非常简单,如下所示:unsignedintFloat_S16LE(float*data,constunsignedintsamples,uint8_t*dest){int16_t*dst=(int16_t*)dest;c

c++ - 如果没有未定义的行为 [c++],哪些浮点值不能转换为 int?

我刚从C++14标准中读到这个(我的重点):4.9Floating-integralconversions[conv.fpint]1Aprvalueofafloatingpointtypecanbeconvertedtoaprvalueofanintegertype.Theconversiontruncates;thatis,thefractionalpartisdiscarded.Thebehaviorisundefinedifthetruncatedvaluecannotberepresentedinthedestinationtype.[...]这让我想到了如果有的话,float

c++ - 如何进行带有偏差的浮点舍入(总是向上或向下舍入)?

我想用一个偏差来舍入float,要么总是向下要么总是向上。代码中有一个特定点我需要这个,程序的其余部分应该像往常一样四舍五入到最接近的值。例如,我想四舍五入到最接近的1/10的倍数。最接近7/10的float约为0.69999998807,但最接近8/10的float约为0.80000001192。当我四舍五入数字时,这是我得到的两个结果。我宁愿让他们以同样的方式四舍五入。7/10应四舍五入为0.70000004768,8/10应四舍五入为0.80000001192。在这个例子中,我总是四舍五入,但我有一些地方我想总是向下舍入。幸运的是,我只处理这些地方的积极值(value)观。我用来

c++ - 如何在C++中使用条件检查typename T是否为整数类型的浮点类型

我将编写一个模板来生成随机数据vector。问题是std::uniform_int_distribution只接受整型,std::uniform_real_distribution接受浮点型。我想把两者结合起来。这是我的代码。#include#include#include#include#includetemplatestd::vectorgenerate_vector(size_tN,Tlower=T(0),Thigher=T(99)){//Specifytheengineanddistribution.ifconstexpr(std::is_integral){std::unif

c++ - 如何将浮点算法转换为定点算法?

在阅读了大量关于定点运算的内容之后,我想我可以说我已经了解了基础知识,不幸的是我还不知道如何转换使用sin/cos/sqrt或任何其他fp函数的例程。考虑这个简单的mcve:#include#include#include#include#includetypedefcharS8;typedefshortS16;typedefintS32;typedefunsignedcharU8;typedefunsignedshortU16;typedefunsignedintU32;typedeffloatF32;typedefdoubleF64;//--------Fixedpointhelp

c++ - x86_64 上 2 的快速浮点幂

有没有快速取2.0的方法达到某种浮点程度x?我的意思是比pow(2.0,x)更快的东西最好使用AVX2进行矢量化处理。整数对应的是1,但它适用于整数n仅。 最佳答案 有一个标准std::exp2(doublen)Computes2raisedtothegivenpowern在特定环境下exp2(x)可能不会比pow(2.0,x)快,但它比一般的pow更具体。 关于c++-x86_64上2的快速浮点幂,我们在StackOverflow上找到一个类似的问题: ht

c++ - 什么可能导致确定性过程产生浮点错误

已阅读此question我有理由相信,使用具有相同输入(在相同硬件上,使用相同编译器编译)的浮点算术的给定过程应该是确定性的。我正在查看一个不正确的案例,并试图确定可能导致这种情况的原因。我已经编译了一个可执行文件并且我正在为它提供完全相同的数据,在一台机器上运行(非多线程)但是我得到了大约3.814697265625e-06的错误,经过仔细的谷歌搜索我发现实际上是等于1/4^9=1/2^18=1/262144。这非常接近32位float的精度级别(根据维基百科,大约为7位数)我怀疑它与已应用于代码的优化有关。我正在使用英特尔C++编译器并将浮点推测转换为快速而不是安全或严格。这会使浮

C++ 确保浮点大小为 4 个字节

我需要一种跨架构的方法来确保float为4个字节(在32位Windows上也是如此)。例如,在我正在创建的结构中,我使用__int32而不是int来确保一个4字节长的整数值。我怎么能用float做到这一点?我知道我可以用__int32类型替换该值;但是,在64位系统上转换为float时,我不会遇到问题吗? 最佳答案 Ineedacross-architecturewaytoensurethatafloatwillbe4bytesint32_t没有用于浮点值的模拟。实现您想要的唯一跨平台方法是使用运行时或静态断言对其进行测试。#inc

c++ - 你能全局设置 qDebug() 浮点精度和数字格式吗?

我想使用qDebug()、qInfo()等具有自定义默认浮点精度和数字格式的函数。有没有办法在全局范围内定义它?想象一下:doublenum=1.2;qDebug()现在我想避免每次写数字时使用QString::number(num,'f',2)并且更愿意使用标准的精度和格式。 最佳答案 QDebug流的格式化canbecontrolled通过QTextStreammanipulators.因此,你必须调用qDebug()在程序的开头。但是请注意,qDebug()的格式化状态可能会在以后发生变化,如果一些(不是很仔细编写的)代码集需

c++ - 编译器之间的浮点不匹配(Visual Studio 2010 和 GCC)

我正在尝试解决一个突然出现的跨平台问题,但我不太确定该怎么做。这是一个演示程序:#include#includeintmain(){intxm=0x3f18492a;floatx=*(float*)&xm;x=(sqrt(x)+1)/2.0f;printf("%f%x\n",x,*(int*)&x);}在VS2010中编译时在Windows上的输出是:0.8856383f62b92a使用GCC4.8.1编译时的输出(ideone.comsample)是:0.8856383f62b92b在需要在多个平台上以相同方式运行的程序过程中,这些小的不匹配最终会膨胀成一个严重的问题。我不太关心“准