草庐IT

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

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

c++ - 为什么我可以将 int 和 BOOL 强制转换为 void*,但不能 float ?

void*是C和衍生语言的一个有用特性。例如,可以使用void*将Objective-C对象指针存储在C++类中。我最近在做一个类型转换框架,由于时间限制有点懒——所以我使用了void*...这就是这个问题的来历:为什么我可以将int类型转换为void*,但不能将浮点类型转换为void*? 最佳答案 BOOL不是C++类型。它可能是typedef或在某处定义的,在这些情况下,它与int相同。例如,Windows在Windef.h中有这个:typedefintBOOL;所以你的问题归结为,为什么你可以将int类型转换为void*,但不

c++ - 为什么我可以将 int 和 BOOL 强制转换为 void*,但不能 float ?

void*是C和衍生语言的一个有用特性。例如,可以使用void*将Objective-C对象指针存储在C++类中。我最近在做一个类型转换框架,由于时间限制有点懒——所以我使用了void*...这就是这个问题的来历:为什么我可以将int类型转换为void*,但不能将浮点类型转换为void*? 最佳答案 BOOL不是C++类型。它可能是typedef或在某处定义的,在这些情况下,它与int相同。例如,Windows在Windef.h中有这个:typedefintBOOL;所以你的问题归结为,为什么你可以将int类型转换为void*,但不

c++ - 根据 float 选择最小整数类型

我正在尝试编写一个包含一个变量的类,该变量的类型将被选择为能够包含值的最小可能。我的意思是:classfoo{"inttypehere"a;}我遇到了Automaticallypickavariabletypebigenoughtoholdaspecifiednumber.由于使用boost库的困难,我继续使用模板建议。这会将代码变成:templateclassfoo{SelectInteger::typea;}但是,我的问题源于变量的大小是浮点变量和整数相乘的结果。因此,我想做的是:templateclassfoo{SelectInteger::typea;}但由于模板不适用于浮点变

c++ - 根据 float 选择最小整数类型

我正在尝试编写一个包含一个变量的类,该变量的类型将被选择为能够包含值的最小可能。我的意思是:classfoo{"inttypehere"a;}我遇到了Automaticallypickavariabletypebigenoughtoholdaspecifiednumber.由于使用boost库的困难,我继续使用模板建议。这会将代码变成:templateclassfoo{SelectInteger::typea;}但是,我的问题源于变量的大小是浮点变量和整数相乘的结果。因此,我想做的是:templateclassfoo{SelectInteger::typea;}但由于模板不适用于浮点变

c++ - 可以在没有 epsilon 的情况下将 float 与 0.0 进行比较吗?

我知道,要比较两个浮点值,需要使用一些epsilon精度,因为它们并不精确。但是,我想知道是否存在不需要那个epsilon的边缘情况。特别是,我想知道这样做是否总是安全的:doublefoo(doublex){if(x我知道有更好的方法来编写foo(例如,另外返回一个标志),但我想知道通常是否可以将0.0分配给浮点变量,然后将其与0.0进行比较。或者更笼统地说,下面的比较是否总是正确的?doublex=3.3;doubley=3.3;if(x==y){std::cout当我尝试它时,它似乎有效,但可能不应该依赖它。 最佳答案 是的,

c++ - 可以在没有 epsilon 的情况下将 float 与 0.0 进行比较吗?

我知道,要比较两个浮点值,需要使用一些epsilon精度,因为它们并不精确。但是,我想知道是否存在不需要那个epsilon的边缘情况。特别是,我想知道这样做是否总是安全的:doublefoo(doublex){if(x我知道有更好的方法来编写foo(例如,另外返回一个标志),但我想知道通常是否可以将0.0分配给浮点变量,然后将其与0.0进行比较。或者更笼统地说,下面的比较是否总是正确的?doublex=3.3;doubley=3.3;if(x==y){std::cout当我尝试它时,它似乎有效,但可能不应该依赖它。 最佳答案 是的,

c++ - 如何使用 float 组中的数据初始化 cv::Mat

我需要创建一个cv::Mat变量,该变量使用float*数组中的数据进行初始化。这应该是基本的,但我无法弄清楚。我有代码:float*matrixAB=;cv::Matcv_matrixAB=cv::Mat(12,10,CV_32F,&matrixAB);但cv_matrixAB永远不会包含float值,更重要的是不匹配matrixAB中包含的数据。如果我将行更改为:cv::Matcv_matrixAB=cv::Mat(12,10,CV_32F,matrixAB);那么cv_matrixAB.data都是0。我也尝试过使用CV_64F作为类型,但我看到了相同的行为。谁能帮我确定我哪里出

c++ - 如何使用 float 组中的数据初始化 cv::Mat

我需要创建一个cv::Mat变量,该变量使用float*数组中的数据进行初始化。这应该是基本的,但我无法弄清楚。我有代码:float*matrixAB=;cv::Matcv_matrixAB=cv::Mat(12,10,CV_32F,&matrixAB);但cv_matrixAB永远不会包含float值,更重要的是不匹配matrixAB中包含的数据。如果我将行更改为:cv::Matcv_matrixAB=cv::Mat(12,10,CV_32F,matrixAB);那么cv_matrixAB.data都是0。我也尝试过使用CV_64F作为类型,但我看到了相同的行为。谁能帮我确定我哪里出

c++ - clang 和 __float128 错误/错误

我已经成功编译了当前3.3的clang分支。但是随后任何文件的C++编译都会因错误/错误而失败。可以解决吗?Infileincludedfrom/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/iostream:39:Infileincludedfrom/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/ostream:39:Infileincludedfrom/usr/lib/gcc/x86_64-linux-gnu/4.7/../../.