草庐IT

c++ - 产生 NaN float 时停止调试器

我有一个C++程序。在程序中的某处(难以重现,但可重现)计算会导致浮点蜂设置为NaN。由于涉及NaN的浮点运算会导致NaN,因此传播速度很快。有什么方法可以设置编译器(gcc4.4)或调试器(gdb)在浮点运算导致NaN时停止?这将非常有用。谢谢!内森PS:这可能很重要:我在ubuntulinux10.10下工作。 最佳答案 您可以启用浮点异常-请参阅glibcControlFunctions-当你的NaN值产生时,你会得到一个SIGFPE 关于c++-产生NaNfloat时停止调试器,

c++ - 如何使用来自另一个 XMM 寄存器条目的 4 个相同 float 填充 x86 XMM 寄存器?

我正在尝试实现一些内联汇编器(在C/C++代码中)以利用SSE。我想将值(从XMM寄存器或内存)复制并复制到另一个XMM寄存器。例如,假设我在内存中有一些值{1,2,3,4}。我想复制这些值,使xmm1填充{1,1,1,1},xmm2填充{2,2,2,2},依此类推。查看英特尔引用手册,我找不到执行此操作的说明。我只需要结合使用重复的MOVSS和旋转(通过PSHUFD吗?)? 最佳答案 有两种方式:仅使用shufps:__m128first=...;__m128xxxx=_mm_shuffle_ps(first,first,0x00

c++ - 如何使用来自另一个 XMM 寄存器条目的 4 个相同 float 填充 x86 XMM 寄存器?

我正在尝试实现一些内联汇编器(在C/C++代码中)以利用SSE。我想将值(从XMM寄存器或内存)复制并复制到另一个XMM寄存器。例如,假设我在内存中有一些值{1,2,3,4}。我想复制这些值,使xmm1填充{1,1,1,1},xmm2填充{2,2,2,2},依此类推。查看英特尔引用手册,我找不到执行此操作的说明。我只需要结合使用重复的MOVSS和旋转(通过PSHUFD吗?)? 最佳答案 有两种方式:仅使用shufps:__m128first=...;__m128xxxx=_mm_shuffle_ps(first,first,0x00

c++ - int2、int3、float2、float3 等类型呢?

我已经看到使用这些类型的不同代码片段,但我还没有看到它们是在某些中定义的,还是只是在“本地头文件”中定义的,甚至是在文件级别。所以我想知道的是:有没有定义这些类型的标准头文件?或者是否有一些每个人都使用的标准定义我应该复制?我猜这些类型的一个可能和常见的用途是表示坐标,我错了吗?如果我想用这些来表示网格中的位置,我还有什么需要考虑的吗?有什么理由为什么或为什么不使用它们?编辑:澄清:int2表示一对整数,float3表示三个float。如果这些类型是在某个地方预定义的,那么使用它们会很好,而不必从头开始编写它,包括标准代数函数(operator+、operator-等)。

c++ - int2、int3、float2、float3 等类型呢?

我已经看到使用这些类型的不同代码片段,但我还没有看到它们是在某些中定义的,还是只是在“本地头文件”中定义的,甚至是在文件级别。所以我想知道的是:有没有定义这些类型的标准头文件?或者是否有一些每个人都使用的标准定义我应该复制?我猜这些类型的一个可能和常见的用途是表示坐标,我错了吗?如果我想用这些来表示网格中的位置,我还有什么需要考虑的吗?有什么理由为什么或为什么不使用它们?编辑:澄清:int2表示一对整数,float3表示三个float。如果这些类型是在某个地方预定义的,那么使用它们会很好,而不必从头开始编写它,包括标准代数函数(operator+、operator-等)。

C++——将 float 组设置为相同值的最快方法

我天真地认为我可以为此使用memset,但显然memset仅用于字符。是否有一个memset类型的东西可以在float组上工作?或者简单迭代是将单个值复制到数组中每个位置的最快方法? 最佳答案 我不会谈论什么代码运行得最快。您应该在预期的环境中自己比较它们。但是,这里有两个可读、可维护、正确的解决方案。std::fill(std::begin(array),std::end(array),3.14);或者,如果你有一个动态数组:std::fill(array,array+size,3.14);

C++——将 float 组设置为相同值的最快方法

我天真地认为我可以为此使用memset,但显然memset仅用于字符。是否有一个memset类型的东西可以在float组上工作?或者简单迭代是将单个值复制到数组中每个位置的最快方法? 最佳答案 我不会谈论什么代码运行得最快。您应该在预期的环境中自己比较它们。但是,这里有两个可读、可维护、正确的解决方案。std::fill(std::begin(array),std::end(array),3.14);或者,如果你有一个动态数组:std::fill(array,array+size,3.14);

c++ - 表示小于 1 的最大 float

我正在做一些四舍五入的计算,偶然发现了一个问题。对于给定的浮点类型,如何表示小于1的最大数量?也就是说,我如何写/表示值x这样x=1对于任何y>0.在分数中,这将是x=(q-1)/q在哪里q是类型的精度。例如,如果您计算1/999然后递增x=998/999.对于给定的类型(float、double、longdouble),如何表示x在代码中?我还想知道y的所有值是否都存在这样的值.也就是说,如y's指数变小也许关系不再成立。所以一个对y有一定范围限制的答案也是可以接受的。(我想要的x的值还是存在的,只是关系可能表达的不好。) 最佳答案

c++ - 表示小于 1 的最大 float

我正在做一些四舍五入的计算,偶然发现了一个问题。对于给定的浮点类型,如何表示小于1的最大数量?也就是说,我如何写/表示值x这样x=1对于任何y>0.在分数中,这将是x=(q-1)/q在哪里q是类型的精度。例如,如果您计算1/999然后递增x=998/999.对于给定的类型(float、double、longdouble),如何表示x在代码中?我还想知道y的所有值是否都存在这样的值.也就是说,如y's指数变小也许关系不再成立。所以一个对y有一定范围限制的答案也是可以接受的。(我想要的x的值还是存在的,只是关系可能表达的不好。) 最佳答案

c# - float 比双倍慢吗? 64位程序运行速度比32位程序快吗?

使用float类型是否比使用double类型慢?我听说现代Intel和AMDCPU使用double计算比使用float更快。标准数学函数(sqrt、pow、log、sin、cos等)?以单精度计算它们应该会快得多,因为它应该需要更少的浮点运算。例如,单精度sqrt可以使用比doublesqrt更简单的数学公式。另外,我听说标准数学函数在64位模式下更快(在64位操作系统上编译和运行时)。对此有什么明确的答案? 最佳答案 经典的x86架构使用浮点单元(FPU)来执行浮点计算。FPU在其内部寄存器中执行所有计算,每个寄存器都有80位精度