草庐IT

c++ - 64 位浮点移植问题

我正在将我的应用程序从32位移植到64位。目前,代码在两种架构下都可以编译,但结果不同。由于各种原因,我使用float而不是double。我假设在一台机器上而不是另一台机器上发生了一些从float到double的隐式上转换。有没有办法控制这个,或者我应该寻找的特定问题?编辑添加:32位平台gcc(GCC)4.1.220070925(RedHat4.1.2-33)Dual-CoreAMDOpteron(tm)Processor2218HE64位平台gcc(Ubuntu4.3.3-5ubuntu4)4.3.3Intel(R)Xeon(R)CPU应用-mfpmath=387有所帮助,在算法的

c++ - 不同的数学 CPU 会产生相同的浮点结果吗?

我正在开发具有必须在Linux、UNIX和Windows上运行的单元测试的OS可移植软件。假设此单元测试断言IEEE单精度浮点值1.26743237e+015f已转换为字符串:voidDataTypeConvertion_Test::TestToFloatWide(){CDataTypeConversiondataTypeConvertion;floatval=1.26743237e+015f;wchar_t*valStr=(wchar_t*)dataTypeConvertion.ToFloat(val);std::wcout我的问题是:只要float是IEEE,所有操作系统和处理器都

c++ - arm cortex a9 交叉编译奇怪的浮点行为

我正在尝试将一个更大的应用程序从x86移植到armcortexa9,但是当交叉编译应用程序时,我遇到了像modf这样的浮点函数的奇怪段错误,其他libc++函数似乎只是错误地处理float,但是不要不会崩溃(见下文)。所以我尝试了这个小测试程序,它也可以触发错误。测试程序的输出(见下文)应该可以证明我的问题。#includeintmain(intargc,char*argv[]){doublex=80;doubley=0;std::cout在armcortexa9上编译:@tegra$g++-Walltest.cpp-otest_nativ@tegra$./test_nativ800交

单片机通过串口发送浮点类型数据

单片机通过串口向串口助手或者其他器件发送数据时是不能直接发送浮点类型数据的,通过printf("%f",1.28)发送浮点数据,在串口助手看似是小数,其实是字符串类型,它们是各符号对应的ASSCII码值(“1”的asscii是0x31,“.”的asscii是0x2E),使用printf发送的%d、%f、%lf等都是这样,是发送的对应数据的各asscii码值,除了%c之外。如下图所示是发送浮点类型串口助手的情况。分别使用%d、%f、%c发送数据,如图(左边是程序,中间是hex类型(字符型)显示,右边是十六进制显示):可以看到,发送的%d的100显示的是100,实际发送的是‘1’‘0’‘0’对应的

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