草庐IT

img_float

全部标签

c++ - 如何在 OpenCV 中将 Float Mat 写入文件

我有一个矩阵垫子B(480,640,CV_32FC1);包含float值..我想将此矩阵写入一个文件,该文件可以在记事本或Msword或Excel中打开以查看其中的值并进行存储....imwritefunction只能保存8位或16位图像..如果可以这样做,请提出您的建议?如果是,如何?? 最佳答案 使用纯OpenCVAPI调用://Declarewhatyouneedcv::FileStoragefile("some_name.ext",cv::FileStorage::WRITE);cv::MatsomeMatrixOfAnyT

c++ - 我可以在 C++ 中安全地将浮点结构转换为 float 组吗?

这个问题在这里已经有了答案:Reinterpretstructwithmembersofthesametypeasanarrayinastandardcompliantway[duplicate](5个回答)关闭5年前。例如我有这个结构structA{floatx;floaty;floatz;};我可以这样做吗?一一;float*数组=(float*)&a;并使用asfloat组? 最佳答案 在实际意义上,是的,您可以这样做,它适用于所有最常用的架构和编译器。见"TypicalalignmentofCstructsonx86"维基百

c++ - 将 int 重新解释为 float 的最有效的标准兼容方式

假设我保证float是IEEE754二进制32。给定一个对应于有效float的位模式,存储在std::uint32_t,如何将其重新解释为float以最有效的标准兼容方式?floatreinterpret_as_float(std::uint32_tui){return/*applysorcerytoui*/;}我有几种方法我知道/怀疑/假设有一些问题:通过reinterpret_cast,floatreinterpret_as_float(std::uint32_tui){returnreinterpret_cast(ui);}或等效floatreinterpret_as_float

c++ - 为什么 numeric_limits::min 为 int 返回负值,但为 float/double 返回正值?

为什么numeric_limits::min会为int返回负值,而为例如返回正值float和双倍?#include#includeusingnamespacestd;intmain(){cout::min()::min()::min()输出:int:-2147483648float:1.17549e-38double:2.22507e-308来自cppreference:ReturnstheminimumfinitevaluerepresentablebythenumerictypeT.Forfloating-pointtypeswithdenormalization,minretur

c++ - float 的跨平台/编译器一致 sprintf

我们有一款游戏需要确定性,因为它是其多人模式的一部分。我们也使用Lua,它在内部使用sprintf(格式为%.14g)。当它打印像0.00001这样的数字时会出现问题。在某些情况下,它会打印1e-05,而在其他一些情况下,它会打印出1e-005(额外的零)。例如,使用VisualStudio2015编译时,它会打印1e-005,而使用VisualStudio2013时,它会打印1e-05。我尝试了不同的语言环境设置,但似乎没有任何效果。问题是:实现确定性结果的最佳解决方案是什么?我真的不在乎科学记数法是标准化的还是被淘汰的。我想到的解决方案:当我使用%f表示法时,它不会忽略不重要的零,

c++ - 如何对 float 执行按位运算

我试过了:floata=1.4123;a=a&(1我收到一个编译器错误,提示&的操作数不能是浮点类型。当我这样做时:floata=1.4123;a=(int)a&(1我让程序运行起来。唯一的一点是,按位运算是对四舍五入后得到的数字的整数表示进行的。以下也是不允许的。floata=1.4123;a=(void*)a&(1我不明白为什么int可以转换为void*而不是float。我这样做是为了解决StackOverflow问题Howtosolvelinearequationsusingageneticalgorithm?中描述的问题。. 最佳答案

c++ - float 是否可以返回 0.0 减去两个不同的值?

由于浮点“近似”性质,两组不同的值可能返回相同的值。Example:#includeintmain(){std::cout.precision(100);doublea=0.5;doubleb=0.5;doublec=0.49999999999999994;std::cout但是减法也可以吗?我的意思是:是否有两组不同的值(保留其中一个值)返回0.0?即a-b=0.0和a-c=0.0,给定一些a,b和a,c的集合>与b!=c?? 最佳答案 IEEE-754标准经过精心设计,当且仅当两个值相等时,减去两个值会产生零,除非从自身减去无穷

c++ - double 或 float,哪个更快?

这个问题在这里已经有了答案:Isusingdoublefasterthanfloat?(10个回答)关闭8年前。我正在阅读“加速C++”。我发现一句话说“有时double在执行中比C++中的float更快”。读完句子后,我对float和double的工作感到困惑。请向我解释这一点。 最佳答案 取决于native硬件的功能。如果硬件是(或类似)具有传统x87数学的x86,float和double都(免费)扩展为内部80位格式,因此两者具有相同的性能(缓存占用空间除外/内存带宽)如果硬件像大多数现代ISA(包括x86-64,其中SSE2

c++ - 使用 2 "double"s 模拟 "float"

我正在为仅支持32位单精度浮点运算的嵌入式硬件编写程序。然而,我正在实现的算法需要64位double加法和比较。我正在尝试使用两个float的元组来模拟double数据类型。因此,doubled将被模拟为包含元组的struct:(floatd.hi,floatd.low)。使用字典顺序进行比较应该简单明了。然而,添加有点棘手,因为我不确定我应该使用哪个基础。应该是FLT_MAX吗?以及如何检测进位?如何做到这一点?编辑(清晰):我需要额外的有效数字而不是额外的范围。 最佳答案 double-float是一种技术,它使用成对的单精度数

c++ - 将最小可能的 float 添加到 float

我想将float的最小可能值添加到float。因此,例如,我尝试这样做以获得1.0+可能的最小float:floatresult=1.0f+std::numeric_limits::min();但是在这样做之后,我得到了以下结果:(result>1.0f)==false(result==1.0f)==true我使用的是VisualStudio2015。为什么会发生这种情况?我能做些什么来绕过它? 最佳答案 如果你想要1之后的下一个可表示的值,有一个函数叫做std::nextafter,来自标题。floatresult=std::ne