floating-point相关内容
是否可以在x86 Linux上将浮点异常(信号)转换为C ++异常? 这是为了调试目的,因此非可移植性和不完善,如果不是100%保证所有析构函数都被调用)。 解决方案 如果你的C ++标准库实现支持TR1函数 fetestexcept , feraiseexcept 和 feclearexcept 我还没有,所以我不能测试这个)你可以检测五种浮点错误,然后你可以抛出任何异常你想要的
..
根据此问题,浮点点除法与浮点乘法 。由于某些原因,除法比乘法慢。 如果可能,编译器通常是否用乘法代替除法? 例如: float a; //在运行时a = 5.4f float b = a / 10.f; 将是: float a; //在运行时a = 5.4f float b = a * 0.1f; 如果认为编译器可靠
..
很长一段时间,我认为C ++比javascript快。然而,今天我做了一个基准脚本来比较两种语言的浮点计算的速度,结果是惊人的! Javascript几乎是c ++的4倍! 我让两种语言在我的i5-430M笔记本电脑上做同样的工作,执行 a = a + b 100000000次。 C ++大约需要410ms,而javascript只需要大约120ms。 我真的不知道为什么java
..
在我看到的大多数代码中, double 是 float 的最爱,即使高精度不需要。 由于存在性能惩罚当使用双重类型(CPU / GPU /内存/总线/缓存/ ...)时,这种双重过度使用的原因是什么? :在计算流体动力学中,我使用的所有软件都使用双精度。在这种情况下,高精度是无用的(因为由于数学模型中的近似的误差),并且存在大量的要移动的数据,其可以使用浮点数削减一半。 今天的计
..
请考虑以下代码,这是我的实际问题的 SSCCE : #include int roundtrip(int x) { return int(float(x)); } int main() { int a = 2147483583; int b = 2147483584; std :: cout”
..
我做了这个程序,它的功能如预期,知道浮点的位表示: float x1 = 675.78125; int * pint1; pint1 =(int *)& x1; for(int i = 0; i { if(* pint1& 1) { cout> = 1; }
..
我正在运行此程序。但得到奇怪的结果。 int main() { float a = .8; if(a
..
在下面的示例应用中,我用 953 和 0.1 计算浮点余数$ c> std :: fmod 我所期望的是,因为 953.0 / 0.1 == 9530 , std :: fmod(953,0.1)== 0 0.1 - 为什么会这样? 请注意, $ c> std :: remainder 我得到正确的结果。 这是: std :: fmod(953,0.1)== 0.1
..
在编写一个函数时,我会在一个范围内的每个数字执行一些操作,我遇到浮点不准确的一些问题。问题可以在下面的代码中看到: #include using namespace std; int main() { double start = .99999,end = 1.00001,inc = .000001; int steps =(end - s
..
我想写一个简单的日志基础2方法。我理解,在计算机上代表像std :: log(8.0)和std :: log(2.0)很困难。我也理解std :: log(8.0)/ std :: log(2.0)可能会导致一个值略低于3.0。我不明白的是为什么把下面的计算结果放到一个双精度值,使其成为一个左值,然后将它转换为一个unsigned int将改变结果相比直接转换公式。下面的代码显示了我的测试用例,它
..
我遇到了一个情况在我的代码中,一个函数返回一个双精度,这是可能的双精度零,负零,或另一个值完全。我需要区分零和负零,但是默认的双重比较没有。由于double的格式,C ++不允许使用逐位运算符比较双精度,所以我不确定如何处理。如何区分两者? 解决方案 致电 std :: signbit() 确定符号位的状态。
..
假设有 n (整数)连续段长度 l (浮点)。也就是: 段0 = [0,l) 段1 = [1,2, b $ b段2 = [2 * 1,3 * l) ... 段(n-1)= [(n-1)* l,n * l) 给定一个数字 x 我的第一个想法是以下内容: code> int segmentId =(int)floor(x / l);
..
编辑:我已经意识到我正在使用 long double 不只是 double (确实)。我还在下面添加了一个例子,用于再现问题中的错误。 +11并使用GCC进行编译。 我处理的情况下,结果在以下两个计算之间变化: value1 = x * 6.0; double六= 6.0; value2 = x * six; != v
..
我需要帮助四舍五入浮点值到一个小数位。 我知道 setprecision(x)和 cout y = floor(x * 10d)/ 10d
..
讨论开始于我对另一个问题的回答。以下代码确定 机器epsilon : float compute_eps(){ float eps = 1.0f; while(1.0f + eps!= 1.0f) eps / = 2.0f; return eps; } 在注释中建议 1.0f + eps!= 1.0f 测试可能失败,因为C ++标准允许使用额外的精度。虽
..
float 在 1.0f 和之间有多少精度 例如,如果第一个小数 float 不能表示 0.13f ,答案是一个浮点数只有1个精度位置。 解决方案 std :: numeric_limits :: digits10 $ b b 从 http://en.cppreference.com/ w / cpp / types / numeric_limits
..
在这个问题中,有一些差异在浮点数的负和正零之间。我知道这是因为一些重要的原因。我想知道的是一个短代码,以避免输出中出现负零。 例如在以下代码中: cout
..
我想考虑编码。首先是: #include #include #include using namespace std; int main(){ int s = 25; cout c:\users\da
..
对于以下程序: #include #include using namespace std; int main() { for(float a = 1.0; a
..
我在对转换后的字符串执行一些操作之后遇到double的精度问题。 #include #include #include using namespace std; //转换函数 void convert(const char * a,const int i,double& out) { doubl
..