Tag: 浮点

当单个精度浮点数大约为零时,它的近似分辨率是多少

我存储了许多经度和纬度作为doubles ,我想知道我是否可以将它们存储为floats 。 要回答这个问题,当存储的值是经度/纬度(-180到+180)时,我需要知道单精度浮点数的近似分辨率。

浮点转换和性能

我知道在浮点数和整数之间进行转换时可能出现的错误,但性能如何(请忽略准确性问题)? 一般来说,如果我对不同算术类型的操作数进行n-ary操作,即不同的浮点类型(例如float和double )和浮点/整数类型组合(例如float和int ),性能是否会受到影响? 是否存在经验法则,例如,使所有操作数保持相同的类型? PS:我在问,因为我正在编写一个表达式模板库,想知道是否允许对包含不同算术类型值的向量进行二进制运算。

是否有一种优先的方式来订购浮点操作数?

假设我有一个非常小的float a (例如a=0.5 ),它输入以下表达式: 6000.f * a * a; 操作数的顺序是否有所不同? 写作更好吗? 6000.f * (a*a); 甚至 float result = a*a; result *= 6000.f; 我已经检查了每个计算机科学家应该知道的关于浮点运算的经典之作但却找不到任何东西。 是否有一种在浮点运算中对操作数进行排序的最佳方法?

任意精度分数算术中的浮点数与有理数(C / C ++)

由于实现AP分数的方法有两种,一种是模拟double数据类型的存储和行为,只有更多的字节,另一种是使用现有的整数APA实现来表示分数作为理性即作为一对整数,分子和分母,这两种方式中的哪一种更有可能在性能方面提供有效的算术? (内存使用率确实很小。) 我知道现有的C / C ++库,其中一些提供带有“浮点数”的小数APA,另一些提供有理数的(不过它们都没有定点APA,但是当然我可以对依赖于“的库进行基准测试”浮动“对使用合理实现的实现进行实现,但结果很大程度上取决于我必须从近十个可用库中随机选择的那些特定库的实现细节。 因此,我感兴趣的两种方法的理论优缺点(或者如果考虑定点APA则为三种)。

用整数除以double

我在将double与int分开时面临一个问题。 代码段是: double db = 10; int fac = 100; double res = db / fac; res的值是0.10000000000000001而不是0.10 。 有谁知道这是什么原因? 我正在使用cc来编译代码。

浮动整数铸造?

我知道浮点数不能完全代表每个数字,因此必然会发生一些错误。 但最近我遇到了一个问题,我没有得到正确的解释。 请逐步解释转换如何影响输出。 截断小数位如何给我错误的答案? #include #include #include int main() { int x; int y = 0; int n = 0; printf(“Enter The Number You Want To Octal Equivalent Of : “); scanf(“%d”,&x); while(x>0) { y = y + (x%8)*pow(10,n); printf(“%d\n” , y); x = x/8 ; n = n + 1; } printf(“Octal Equivalent is […]

理解if()中的float变量比较

无法找到以下代码的原因: #include int main() { float f = 0.1; if (f == 0.1) printf(“True”); else printf(“False”); return 0; } 输出为false。 #include int main() { float f = 0.1; if (f == (float)0.1) printf(“True”); else printf(“False”); return 0; } 现在显示正确的输出。 这背后的原因是什么? 这种行为的原因是什么呢? #include main() { int n = 0, m = 0; if (n > 0) […]

C:(int)x和floor(x)之间的差异?

在C中,这两者有什么区别? float myF = 5.6; printf( “%i \n”, (int)myF ); // gives me “5” printf( “%ld \n”, floor(myF) ); // also “5”? 什么时候优于另一个?

为什么scanf对大浮点数输错了?

#include int main() { float k; scanf(“%f”, &k); printf(“%f”, k); } 在这个简单的程序中,当我输入一个包含最多8位数的数字时,它会正确显示。 但如果我超过8位,即对于输入123456789 ,输出为123456792 。 为什么会这样? 好有趣的事实是,如果我在123456789和123456796之间输入任何数字,那么它总是显示123456792 。 它是否与浮点数的8位小数精度有关?

快速浮动量化,按精度缩放?

由于浮点精度因较大值而减小,在某些情况下,根据其大小量化值可能很有用 – 而不是按绝对值量化。 一种天真的方法可能是检测精度并进行扩展: float quantize(float value, float quantize_scale) { float factor = (nextafterf(fabsf(value)) – fabsf(value)) * quantize_scale; return floorf((value / factor) + 0.5f) * factor; } 然而,这似乎太沉重了。 相反,它应该可以屏蔽浮点数mantisa中的位来模拟类似于投射到16位浮点数的东西,然后返回 – 例如。 不是浮点钻头的专家,我不能说结果浮点数是否有效(或需要规范化) 对于速度,当关于舍入的确切行为不重要时,什么是量化浮点数的快速方法,考虑其大小?