Tag: 浮点

浮点类型的有效位数

C中类型float的描述提到有效位数是6 。 然而, float f = 12345.6; 然后使用printf()打印它不打印12345.6 ,它打印12345.599609 。 那么对于浮点类型,“6位有效数字”(或“ double情况下为15”)意味着什么呢?

C:我用pow(10,2)和pow(10,j)获得了不同的结果,j = 2;

这个打印100: int j=2; int i= pow(10,2); printf(“%d\n”, i); 这个打印99: int j=2; int i= pow(10,j); printf(“%d\n”, i); 为什么?

处理浮点exception

我不知道如何处理C或C ++中的浮点exception。 从wiki中,有以下类型的浮点exception: IEEE 754 specifies five arithmetic errors that are to be recorded in “sticky bits” (by default; note that trapping and other alternatives are optional and, if provided, non-default). * inexact, set if the rounded (and returned) value is different from the mathematically exact result of the operation. * underflow, set if the […]

c中浮点的精确表示

void main() { float a = 0.7; if (a < 0.7) printf("c"); else printf("c++"); } 在上面的问题0.7中,将打印“c”,但是对于0.8,将打印“c ++”。 为什么? 以二进制forms表示任何浮点数如何? 在某些地方,提到内部0.7将存储为0.699997,但0.8存储为0.8000011。 为什么这样?

在C中读/写浮点类型时如何处理字节顺序差异?

我正在为我的应用程序设计一种文件格式,我显然希望它可以在big-endian和little-endian系统上运行。 我已经找到了使用htonl和ntohl来管理整数类型的工作解决方案,但是当我尝试使用float和double值进行相同操作时,我有点卡住了。 鉴于浮点表示如何工作的性质,我认为标准的字节顺序函数不适用于这些值。 同样,我甚至不完全确定传统意义上的字节顺序是否支配这些类型的字节顺序。 我需要的只是一致性。 写一个double出来的方法,并确保我在读回来时得到相同的值。我怎么能在C中做到这一点?

比较浮动和双重

#include int main(void){ float a = 1.1; double b = 1.1; if(a == b){ printf(“if block”); } else{ printf(“else block”); } return 0; } 打印:else阻止 #include int main(void){ float a = 1.5; double b = 1.5; if(a == b){ printf(“if block”); } else{ printf(“else block”); } return 0; } 打印:如果阻止 这背后的逻辑是什么? 编译使用:gcc-4.3.4

C动态printf double,不会丢失精度,也不会有尾随零

我是C的新手,从网上学习/上网。 我正在尝试编写一个函数,我可以传递任何double并返回一个int ,用于printf(“%.*lf” …语句,这样返回的int既不会降低精度也不会产生尾随零。 我有一个工作函数,但它很大,因为它是为了可读性而编写的,所有注释。 为了总结这个函数,我计算在10 > d >= 0的范围内得到double所需的除以10的除法,只取小数部分并将其放入一个带有n个小数位的string ,其中n = 15 – number_of_digits_left_of_decimal (我读到double类型只能跟踪15位数,从右到左检查string是否为尾随零并保持计数,最后返回一个int ,表示小数右边的非零数字。 有没有更简单的方法? 谢谢。 int get_number_of_digits_after_decimal(double d) { int i = 0; /* sometimes you need an int */ int pl = 0; /* precision left = 15 – sigfigs */ int sigfigs = 1; /* the number of digits […]

当计算结果在运行时导致NaN或inf时,我可以让gcc告诉我吗?

有没有办法告诉gcc抛出一个SIGFPE或类似的东西来响应在运行时产生NaN或(-)inf的计算,就像它会被零除? 我已经尝试了-fsignaling-nans标志,这似乎没有帮助。

浮在C上的麻烦

我在C中有这个小程序,它使用递归函数(使用while循环实现)计算正整数N平方根x 。 如果我用这个计算x : x = (1/2)*(x + N/x) //x0 = 1.0 然后x继续增长到inf,然后是nan。 但是,如果我使用这个: x = (x + N/x)/2 //x0 = 1.0 它工作正常,为什么? 谢谢。

C:如何将浮动包装到区间

我正在寻找一些有效的C代码: while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI; while (deltaPhase < -M_PI) deltaPhase += M_TWOPI; 我有什么选择?