草庐IT

浮点数二分

全部标签

c++ - Linux 中的可执行文件会影响链接动态库中的浮点精度吗?

我们在动态库中遇到浮点精度问题。设置如下:我们有一个动态库,它对大量float执行计算X。X由很多浮点运算组成。我们将这个动态库链接到两个可执行文件:A和B。在库中,我们打印计算X的输入。对于运行的可执行文件A和B,报告完全相同的输入(最多DBL_DIG小数位)。然而,对于可执行文件A和可执行文件B,计算X的输出是不同的。可执行文件和库都是用C++编写的,并在同一台机器上使用相同的GCC编译器版本编译。该库仅使用与可执行文件A相同的编译器设置编译一次,但可执行文件B的编译器设置可能不同。由于使用相同的库,我们期望在提供相同输入时两个可执行文件具有相同的计算精度。看起来库的浮点精度受外部

linux - 如何禁用浮点单元 (FPU)?

我想在x86系统中禁用FPU/MMX/SSE指令,我将为Device-Not-Available异常实现一个处理程序。我提到了Controlregisterwikipage;看来我必须在cr0寄存器中设置一些标志。如何在cr0中设置这些标志并在启动时执行此工作? 最佳答案 用于管理FPU状态的Linux内核代码可以在arch/x86/kernel/traps.c中找到,do_device_not_available()。默认情况下,Linux内核禁用所有进程的FPU,并在首次访问时启用它。这允许内核减少不使用FPU的进程的上下文切换

linux - 如何禁用浮点单元 (FPU)?

我想在x86系统中禁用FPU/MMX/SSE指令,我将为Device-Not-Available异常实现一个处理程序。我提到了Controlregisterwikipage;看来我必须在cr0寄存器中设置一些标志。如何在cr0中设置这些标志并在启动时执行此工作? 最佳答案 用于管理FPU状态的Linux内核代码可以在arch/x86/kernel/traps.c中找到,do_device_not_available()。默认情况下,Linux内核禁用所有进程的FPU,并在首次访问时启用它。这允许内核减少不使用FPU的进程的上下文切换

将 32 位转换为浮点值

我正在研究DSP处理器,以在Linux系统上使用C实现BFSK跳频机制。在程序的接收器部分,我得到一组样本的输入,我使用Goertzel算法对其进行解调以确定接收到的位是0还是1。现在,我能够单独检测到这些位。但是我必须以float组的形式返回数据进行处理。因此,我需要打包接收到的每组32位以形成浮点值。对,我正在做类似的事情:uint32_ti,j,curBit,curBlk;unint32_t*outData;//thisisintiallizedtoaddressofsomepre-definedlocationinDSPmemoryfloat*output;for(i=0;i>

将 32 位转换为浮点值

我正在研究DSP处理器,以在Linux系统上使用C实现BFSK跳频机制。在程序的接收器部分,我得到一组样本的输入,我使用Goertzel算法对其进行解调以确定接收到的位是0还是1。现在,我能够单独检测到这些位。但是我必须以float组的形式返回数据进行处理。因此,我需要打包接收到的每组32位以形成浮点值。对,我正在做类似的事情:uint32_ti,j,curBit,curBlk;unint32_t*outData;//thisisintiallizedtoaddressofsomepre-definedlocationinDSPmemoryfloat*output;for(i=0;i>

linux - 在 x86 linux 上使用软件浮点

是否可以(轻松地)在i386linux上使用软件float,而不会在每次调用时陷入内核?我试过-msoft-float,但似乎正常的(ubuntu)C库没有包含FP库:$gcc-m32-msoft-float-lm-otesttest.c/tmp/cc8RXn8F.o:Infunction`main':test.c:(.text+0x39):undefinedreferenceto`__muldf3'collect2:ldreturned1exitstatus 最佳答案 令人惊讶的是gcc本身不支持此代码,因为代码在名为soft-f

linux - 在 x86 linux 上使用软件浮点

是否可以(轻松地)在i386linux上使用软件float,而不会在每次调用时陷入内核?我试过-msoft-float,但似乎正常的(ubuntu)C库没有包含FP库:$gcc-m32-msoft-float-lm-otesttest.c/tmp/cc8RXn8F.o:Infunction`main':test.c:(.text+0x39):undefinedreferenceto`__muldf3'collect2:ldreturned1exitstatus 最佳答案 令人惊讶的是gcc本身不支持此代码,因为代码在名为soft-f

c - 浮点异常核心转储

我是Linux信号方面的新手,请帮忙。以下代码在Linux2.6gcc中运行时获取核心转储。$./a.out浮点异常(核心转储)问题:1.既然安装了进程信号掩码,第40行volatileintz=x/y;生成的“SIGFPGE”是不是应该被屏蔽?2.如果没有阻塞,既然已经安装了信号处理程序,那么“SIGFPE”不应该被信号处理程序捕获,而不是核心转储吗?3.如果我注释掉第40行volatileintz=x/y;,并改用第42行raise(SIGFPE);,那么一切都按我预期的那样工作。这里x/0和raiseSIGFPE有什么区别?代码如下:#include#include#includ

c - 浮点异常核心转储

我是Linux信号方面的新手,请帮忙。以下代码在Linux2.6gcc中运行时获取核心转储。$./a.out浮点异常(核心转储)问题:1.既然安装了进程信号掩码,第40行volatileintz=x/y;生成的“SIGFPGE”是不是应该被屏蔽?2.如果没有阻塞,既然已经安装了信号处理程序,那么“SIGFPE”不应该被信号处理程序捕获,而不是核心转储吗?3.如果我注释掉第40行volatileintz=x/y;,并改用第42行raise(SIGFPE);,那么一切都按我预期的那样工作。这里x/0和raiseSIGFPE有什么区别?代码如下:#include#include#includ

代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素

一、704.二分查找今天明确了二分查找的两种写法:左闭右闭[left,right]和左闭右开[left,right),两种写法如下:1.左闭右闭[left,right]代码如下:classSolution{public:intsearch(vectorint>&nums,inttarget){intleft=0,right=nums.size()-1;while(leftright){intmid=left+(right-left)/2;if(nums[mid]>target)right=mid-1;elseif(nums[mid]target)left=mid+1;elsereturnmid