草庐IT

c++ - 为什么两个 float 类型的变量有不同的值

这个问题在这里已经有了答案:Howdangerousisittocomparefloatingpointvalues?(12个答案)Whatisthemosteffectivewayforfloatanddoublecomparison?(34个答案)关闭9年前。我有两个大小接近1000的整数vector,我要做的是检查这两个vector的整数平方和是否相同。所以我写了下面的代码:std::vectorarray1;std::vectorarray2;...//initializearray1andarray2,andintheexperimentallelements//inthet

C++ - 当您用 float 索引数组时会发生什么?

我试图准确理解在对具有浮点值的数组进行索引时会发生什么。此链接:FloatValuesasanindexinanArrayinC++没有回答我的问题,因为它指出float应四舍五入为整数。然而,在我尝试评估的代码中,这个答案没有意义,因为索引值只会是0或1。我正在尝试解决任天堂发布的编码挑战。为了解决这个问题,有一个古老的语句,它使用一个长而复杂的按位表达式对数组进行按位赋值。数组被声明为指针unsignedint*b=newunsignedint[size/16];//然后给每个元素赋0for(inti=0;i这是声明的开头。b[(i+j)/32]^=//somecrazybitwi

c++ - 关于C++中float数据类型声明的困惑

这里完全是新手。对于我的学校作业,我被要求编写一个程序来显示-s=1+1/2+1/3+1/4.....+1/n这是我做的-#include#includevoidmain(){clrscr();inta;floats=0,n;cin>>a;for(n=1;n它完美地显示了它应该显示的内容。但是,过去我只编写过使用int数据类型的程序。据我了解,int数据类型不包含任何小数位,而float则包含。所以我对float还不太了解。那天晚上晚些时候,我在YouTube上观看了一些视频,其中他正在编写完全相同的程序,但方式略有不同。视频是外语的,所以我看不懂。他所做的被声明为整数“n”。inta

c++ - 计算 float 中的数字

我正在学习C++中OpenGL的一些初学者教程,但是当我开始作为一名C#程序员时,它让我认为很多事情都是理所当然的。所以当我调试将FPS读数打印到输出时,我的问题就出现了。我认为该方法类似于DebugPrintString之类的东西,它占用了一个char*并且基本上我正在打印“FPS:x”。我正在使用scanf_s将fps值放入字符数组,但这是我的问题所在。字符数组必须有多大?让我详细说明一下:我的FPS读数存储为float,因为帧/秒通常最终不是一个很好的数字。所以我的号码可能是60,也可能是59.12345。60只需要2个字节,而59.12345需要8个字节(期间为1个字节)。所以

c++ - const float & x = something;//被认为是有害的?

有一些代码是这样的://Conveniencetomakethingsmorelegibleinthefollowingcodeconstfloat&x=some.buried.variable.elsewhere;//Goontousexincalculations...有人告诉我“constfloat&”是“坏的”,应该只是一个普通的float或constfloat。但是,除了“您不必键入‘&’”之外,我想不出一个令人信服的理由。事实上,在我看来,在某些情况下,原始版本可能会更好,因为编译器可能不会为变量分配额外的堆栈空间。换句话说,本来我可以有效地说:assert(&x==&so

C++ next float with numeric_limits/epsilon?

考虑C++中的“正常”实数TREALx(不是次正规的也不是NaN/Infinite)(TREAL=float,double,longdouble)以下是从浮点角度查找上一个和下一个x的好解决方案吗?TREALxprev=(((TREAL)(1.))-std::numeric_limits::epsilon())*x;TREALxnext=(((TREAL)(1.))+std::numeric_limits::epsilon())*x;非常感谢。 最佳答案 C99和C++11在中有nextafter、nextafterl和nextaf

c++ - 浮点计算使用 float 的结果与使用 double 的结果不同

我有以下代码行。hero->onBeingHit(ENEMY_ATTACK_POINT*(1.0-hero->getDefensePercent()));voidonBeingHit(intdecHP)方法接受整数并更新健康点数。floatgetDefensePercent()方法是一个返回英雄防御百分比的getter方法。ENEMY_ATTACK_POINT是定义为#defineENEMY_ATTACK_POINT20的宏常数因子。假设hero->getDefensePercent()返回0.1。所以计算是20*(1.0-0.1)=20*(0.9)=18每当我尝试使用以下代码时(没有

c++ - 为什么 float 可以比较?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:strangeoutputincomparisionoffloatwithfloatliteral#includeintmain(){floatme=1.7;if(me==1.7)printf("C");elseprintf("C++");}Output:C++造成这种行为的原因据说是许多float不能用二进制的绝对精度表示。我的问题是-如果计算机以二进制方式思考和操作。比较时,me表示的任何不确定性对于1.7都是相同的。所以两者应该相等。另外,类型转换是如何解决这个问题的?(float)1.7

c++ - 在 float 中实现 pow() 函数的最有效方法

我正在尝试实现我自己的pow()和sqrt()函数版本,因为我的自定义库不支持pow()/sqrt()float。有人可以帮忙吗? 最佳答案 是的,Sun可以(我猜现在是Oracle):fdlibm,“可自由分发的数学库”,有sqrt和pow,以及许多其他数学函数。不过,它们是相当高科技的实现,当然,没有什么是像这样的东西的“最有效”实现。您是在寻找源代码来完成它,还是真的不是在寻找pow和sqrt,而是在寻找浮点算法编程方面的教育? 关于c++-在float中实现pow()函数的最有效

c++ - 将 32 位 float 打包成 30 位 (c++)

以下是我要实现的目标:我需要将32位IEEEfloat打包成30位。我想通过将尾数的大小减少2位来实现这一点。操作本身应该尽可能快。我知道会损失一些精度,这是可以接受的。如果此操作不会破坏SNaN、QNaN、无穷大等特殊情况,那将是一个优势。但我准备牺牲这个速度。我想这个问题由两部分组成:1)我可以简单地清除尾数的最低有效位吗?我已经试过了,到目前为止它是有效的,但也许我是在自找麻烦……比如:floatf;intpacked=(*(int*)&f)&~3;//laterf=*(float*)&packed;2)如果在某些情况下1)会失败,那么实现这一目标的最快方法是什么?提前致谢