Tag:

如何检查float是否可以精确表示为整数

我正在寻找一种合理有效的方法来确定浮点值( double )是否可以由整数数据类型( long ,64位)精确表示。 我最初的想法是检查指数是否为0 (或更准确地说是127 )。 但这不起作用,因为2.0将是e = 1 m = 1 … 所以基本上,我被卡住了。 我有一种感觉,我可以使用位掩码做到这一点,但我现在还没有理解如何做到这一点。 那么我怎样才能检查一个double是否可以完全表示为long? 谢谢

C:将double转换为float,保留小数点精度

我想在C中将double转换为float,但希望尽可能保留小数点而不做任何更改… 例如,让我说我有 double d = 0.1108; double dd = 639728.170000; double ddd = 345.2345678 现在纠正我,如果我错了,我知道点后面的浮点精度大约是5个数字。 我可以在点之后得到那五个数字吗? 以上结果如下: float f = x(d); float ff = x(dd); float fff = x(ddd); printf(“%f\n%f\n%f\n”, f, ff, fff); 它应该打印 0.1108 639728.17000 345.23456 精度限制之后的所有数字(我假设为5)将被截断。

C printf使用%d和%f

我正在研究这个程序,我注意到使用%f表示double,%d表示float,这给了我一些完全不同的东西。 谁知道为什么会这样? int main () { float a = 1F; double b = 1; printf(“float =%d\ndouble= %f”, a, b); } 这是输出 float = -1610612736 double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000

如何在C中读取2D双数组中的.pgm图像文件

问题很简单:如何将.pgm图像文件读入C中的2D双数组。我的内存中没有.pgm缓冲区。 我想把它从磁盘读入内存。 如果我能得到一个代码片段,真的很感激。 谢谢。

将字符串转换为double

我正在寻找一种从用户那里获得浮点输入的方法。 我的方法是使用自制的getstrn函数并将其插入到另一个将字符串转换为double的函数中。 我的安全获取字符串: void safeGetString(char arr[], int limit){ int c, i; i = 0; c = getchar(); while (c != ‘\n’){ if (i < limit -1){ arr[i] = c; i++; } c = getchar(); } arr[i] = '\0'; } 编写这个get_double函数的最佳方法是什么?

浮点数和双变量的比较

可能重复: float和double之间的区别 float与float文字的比较中的奇怪输出 我正在使用visual C ++ 6.0,在程序中我比较float和double变量例如这个程序 #include int main() { float a = 0.7f; double b = 0.7; printf(“%d %d %d”,ab,a==b); return 0; } 我得到1 0 0作为输出 并为 #include int main() { float a = 1.7f; double b = 1.7; printf(“%d %d %d”,ab,a==b); return 0; } 我输出0 0 0。 请告诉我为什么我得到这些奇怪的输出,有没有办法在同一个处理器上预测这些输出。 如何比较C中的两个变量?

在C中有效地提取double *的小数部分

我希望采用IEEE双精度并以最有效的方式删除它的任何整数部分。 我想要 1035 ->0 1045.23->0.23 253e-23=253e-23 我不关心正确处理非正规,无穷大或NaN。 我不介意有点麻烦,因为我知道我正在使用IEEE双打,所以它应该适用于各种机器。 无分支代码将是更受欢迎的。 我的第一个念头是(伪代码) char exp=d.exponent; (set the last bit of the exponent to 1) d<0); (& mask the last 52 bits of d) (shift d left until the last bit of the exponent is zero, decrementing exp each time) d.exponent=exp; 但问题是我无法想到一个有效的方法来向左移动直到指数的最后一位为零,而且如果没有设置所有最后一位,它似乎需要输出零。 这似乎与基数2对数问题有关。 对此算法或任何更好的算法的帮助将非常感激。 我应该注意到我想要无分支代码的原因是因为我希望它能有效地进行矢量化。

比较目标C中的float和double数据类型

当在iPhone应用程序中使用double或float数据类型时,我遇到了“> =”和“ = 4.2”是错误的而不是真的。 我该如何避免这个问题?