草庐IT

浮点数

全部标签

c++ - 浮点,我可以信任多少小于/大于比较?

假设我有两个float,我想比较它们。如果一个大于另一个,程序应该采用一个fork。如果情况正好相反,它应该走另一条路。并且它应该做同样的事情,如果被比较的值在一个仍然应该使它比较真实的方向上被轻轻插入。这是一个很难表达的问题,所以我写了这个来演示它-floata=random();floatb=random();//alwaysreturnsanumber(noinfinityorNaNs)if(a=b){if(!(a>=b-FLOAT_EPISILON))launchTheMissiles();buildOrphanages();}else{launchTheMissiles();

c++ - 为什么 c/c++ 浮点类型的命名如此奇怪?

C++提供三种浮点类型:float、double和longdouble。我很少在我的代码中使用float,但是当我这样做时,我总是被诸如之类的无害行上的警告所吸引floatPiForSquares=4.0;问题是文字4.0是double,而不是float-这很烦人。对于整数类型,我们有shortint、int和longint,这很简单。为什么C没有短float、float和长float?“double”到底是从哪里来的?编辑:float类型之间的关系似乎类似于整数。double必须至少与float一样大,longdouble至少与double一样大。没有其他精度/范围保证。

c++ - 获取错误浮点异常: 8

我不知道为什么g++不喜欢我的代码。它在java中运行良好。任何见解将不胜感激。#includeusingnamespacestd;boolisPrime(longnumber);intmain(){constlongnumber=600851475143;longmax=0;for(longi=0;i*i 最佳答案 constlongnumber=600851475143;有溢出,long不能容纳那么大的数字。见thislinkLONG_MAXis2147483647尝试:constunsignedlonglongnumber=6

c++ - C++中的浮点格式

如何在C++中格式化float以输出到四舍五入的两位小数?我对setw不满意和setprecision正如我的编译器告诉我的那样,它们是notdefined.cout总输出:Total:12.3961我希望它是:12.40或12.39如果收集起来工作量太大。 最佳答案 您需要包含并将命名空间范围提供给setwandsetprecision#includestd::setw(2)std::setprecision(5)尝试:cout.precision(5);cout或coutiostream提供了精度功能,但要使用setw,可能需要

c++ - 如果 operator< 适用于浮点类型,为什么我们不能将它用于相等性测试?

正确测试两个float是否相等是很多人(包括我)不完全理解的事情。然而,今天,我想到了一些标准容器如何根据operator来定义相等性。我总是看到人们在平等方面存在问题,但从来没有在其他关系比较方面遇到过问题。甚至还有silentversions可供使用,包括除平等和不平等之外的所有内容。假设operator工作“正常”,不像operator==,为什么我们不能这样做:boolfloateq(floata,floatb){//checkNaNreturn!(a事实上,如here所示,我确实运行了一个额外重载double的测试,它似乎与将它们与operator==进行比较时存在相同的缺陷

c++ - C++中是否有浮点文字后缀来使数字 double ?

我目前正在从事一个进行数值计算的C++项目。绝大多数代码使用单精度浮点值,并且可以很好地使用它。因此,我使用编译器标志来使基本的浮点文字单精度而不是double,这是默认的。我发现这使表达式更易于阅读,而且我不必担心在某处忘记“f”。但是,我时不时需要double计算提供的额外精度,我的问题是如何将double文字放入这样的表达式中。到目前为止,我尝试过的每种方法都首先将值存储在单精度变量中,然后将截断的值转换为double值。不是我想要的。下面给出了我目前尝试过的一些方法。#includeintmain(){std::cout(1.0E200))(1.0E200)使用单精度常量运行会

C++17 和十进制浮点的当前状态

C++中十进制浮点的现状如何?我特别关注语言包容性、标准合规性和可移植性的状态。有许多“官方”库基于现有标准(尤其是IEEE754-2008),这些标准被认为是纳入标准的基础:BloombergBDLDecimalFloatLibrarylibdfp(originallyIBMDecimalFloatingPointLibrary)此外,还有一个proposal将十进制float添加到C++14。根据thispost中的提议者它没有及时提交以供收录(请参阅答案评论)。我还检查了C++17features的许多来源。,但我找不到十进制float。我知道一些编译器(例如GCC和Clang)

c++ - float 与定点数 : what are the pros/cons?

浮点类型通过将有效数字和指数分别存储在单独的二进制字中来表示数字,因此它适合16、32、64或128位。定点类型用2个字存储数字,一个代表整数部分,另一个代表小数部分,负指数,2^-1、2^-2、2^-3等。float更好,因为它们在指数意义上具有更广泛的范围,但如果想要在某个范围内以更高的精度存储数字,例如仅使用-16到16之间的整数,因此使用更多位来保存数字,则不是超过基数。在性能方面,哪一个性能最好,或者是否存在一些比另一个更快的情况?在视频游戏编程中,每个人都使用float是因为FPU让它更快,还是因为性能下降可以忽略不计,还是他们自己制作固定类型?为什么C/C++中没有固定类

c++ - 如何检测 double 浮点上溢和下溢?

我有以下变量:doubledblVar1;doubledblVar2;它们的值可能很大,但小于doublemax.我对上述变量有各种算术,比如加法、乘法和幂:doubledblVar3=dblVar1*dblVar2;doubledblVar4=dblVar1+dblVar2;doubledblVar5=pow(dblVar1,2);在以上所有内容中,我必须检查上溢和下溢。如何在C++中实现这一点? 最佳答案 很大程度上取决于上下文。要完美便携,您必须检查之前操作,例如(补充):if((astd::numeric_limits::m

c++ - 用于负零浮点值?

考虑以下C++代码:doublesomeZero=0;std::cout问题出现了:负零有什么好处,是否应该防御性地避免它(即使用减法而不是在变量上加上减号)? 最佳答案 来自维基百科:ItisclaimedthattheinclusionofsignedzeroinIEEE754makesitmucheasiertoachievenumericalaccuracyinsomecriticalproblems[1],inparticularwhencomputingwithcomplexelementaryfunctions[2].