Tag: 浮点

读取浮动到数组中

我怎么能读取让我们说10个浮点数并将它们存储在一个数组而不浪费任何内存?

C当值溢出时,将浮点类型转换为无符号整数类型时会发生什么

我想知道在C中从浮点类型转换为无符号整数类型时会发生什么,当值无法用相关的整数类型准确表示时。 举个例子 func (void) { float a = 1E10; unsigned b = a; } b我在我的系统上的值(在我的系统上unsigned能够表示从0到2 ^ 32-1的值)是1410065408 。 这对我来说似乎是明智的,因为它只是演员阵容结果的最低位。 我相信这些操作的行为在标准中是不确定的。 我错了吗? 如果我做这样的事情,我在实践中可以期待什么? 此外,签名类型会发生什么? 如果b是int类型,我得到-2147483648 ,这对我来说没有意义。

将4个原始字节转换为32位浮点

我正在尝试从eeprom重构一个32位浮点值。 eeprom存储器(0-4)中的4个字节是:B4 A2 91 4D 并且PC(VS Studio)正确地重建它为3.054199 * 10 ^ 8(我知道浮点值应该在那里) 现在我将这个eeprom从8位Arduino中读取,所以不确定它是否是编译器/平台的东西,但是当我尝试将4个字节读入32位双字符,然后将其强制转换为浮点数时,我得到的价值甚至不是很接近。 假设使用标准ansi-c编译器无法自动完成转换,如何将4个字节手动解析为浮点数?

为什么在C中添加两个浮点数是不正确的?

我有一个问题,添加两个浮点数。 代码如下: float a = 30000.0f; float b = 4499722832.0f; printf(“%f\n”, a+b); 为什么输出结果是450002816.000000? (正确的应该是450002832.)

面试问题打印浮点数

以下程序的输出是什么?为什么? #include int main() { float a = 12.5; printf(“%d\n”, a); printf(“%d\n”, *(int *)&a); return 0; } 我的编译器打印0和1095237632.为什么?

将NAN浮动转换为int的问题

忽略我为什么要这样做,754 IEEE fp标准没有定义以下行为: float h = NAN; printf(“%x %d\n”, (int)h, (int)h); Gives: 80000000 -2147483648 基本上,无论我给出的NAN值是多少,它都输出80000000(hex)或-2147483648(十进制)。 是否有这样的原因和/或这是正确的行为? 如果是这样,怎么回事? 我给它不同的NaN值的方法是: 如何手动设置等于NaN的浮点数的值? 所以基本上,是否存在NaN的有效载荷影响演员阵容输出的情况? 谢谢!

为什么相同的代码会在32位与64位计算机上产生不同的数字结果?

我们正在研究C中的数值例程库。我们还不确定我们是使用单精度( float )还是double( double ),所以我们将类型SP定义为别名,直到我们决定: typedef float SP; 当我们运行我们的unit testing时,它们都会通过我的机器(一个64位的Ubuntu)但是它们在我的同事(一个错误地安装在64位机器上的32位Ubuntu)上失败了。 使用Git的bisect命令,我们发现在他的机器和我的机器之间开始产生不同结果的确切差异: -typedef double SP; +typedef float SP; 换句话说,从双精度到单精度会在我们的机器上产生数值上不同的结果(在最坏情况下约为1e-3相对差异)。 我们相当肯定,我们永远不会将无符号的整数与负数签名的整数进行比较。 为什么数字例程库会在32位操作系统和64位系统上产生不同的结果? 澄清 我担心我可能不够清楚:我们使用Git commit 2f3f671使用双精度,并且unit testing在两台机器上同样运行良好。 然后我们有Git commit 46f2ba ,我们将其更改为单精度,这里测试仍然在64位机器上传递但在32位机器上没有。

浮点打印不准确

可能重复: C中的浮点问题 #include main() { int a,b; float f; scanf(“%2d%3d%4f”,&a,&b,&f); printf(“%d %d %f”,a,b,f); } 当我运行这个程序并输入2 4 56.8时,它输出2 4 56.799999 …..但我希望2 4 56.8 ….为什么会这样???

交换1000位数字与10位数字(C)

我试图切换例如:输入54321.987,然后4和2应该切换,所以输出将是52341.987。 54321.777应该成为52341.777。 如果它是2345.777,它应该是4325.777。 比我不关心的任何东西。 但如果它像888886543.777那样只有第二个和第四个数字应该从逗号之前的最右边部分切换。 所以它会变成888884563.777 因此,正如LearningC建议的那样,我试图仅用1000s数字与10s数字交换。 但无论我尝试什么,我都会遇到错误。 我无法传递错误。 我该怎么做? 到目前为止,实际上有效的是: int main(int argc, char** argv) { double x; scanf(“%lf”, &x); double tens = ((int) (x / 10)) % 10; double thousands = ((int) (x / 1000)) % 10; printf(“%09.3f”, x += (tens – thousands) * 990.0); return 0; } 上面的代码现在有效。

浮点数的最大值

对于以下循环,我期望输出为sum = 20e6但输出为sum = 1.67772e+07 。 float sum=0.0f; for(i=0;i<20e6;i++) sum = sum + 1.0f; printf("sum = %g\n", sum); 问题1:为什么sum浮动不能保持大于1.67772e07值? 问题2:如果我将循环中的语句更改为sum = sum + 1.001f; 那么总和的最终值是2.32229e+07 。 为什么这个总和的价值不同? 问题3:我们可以在上面的循环中控制这种行为,这样我们可以使用float大于1.67772e07值,同时仍然增加1.0f吗?