Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将无符号long-long转换为float并丢失精度_C_Floating Point_Unsigned Long Long Int - Fatal编程技术网

C 将无符号long-long转换为float并丢失精度

C 将无符号long-long转换为float并丢失精度,c,floating-point,unsigned-long-long-int,C,Floating Point,Unsigned Long Long Int,我有两个无符号长数字l1和l2。 我将这些数字转换为浮点数,并将它们保存为f1和f2 现在考虑L1>L2的任意量,例如100。 是否存在f1=F2,如果两个变量都转换成浮点,这是肯定的。我认为实现方式可能会有所不同,例如浮点f1=l1;如果f1

我有两个无符号长数字l1和l2。 我将这些数字转换为浮点数,并将它们保存为f1和f2

现在考虑L1>L2的任意量,例如100。 是否存在f1

sizeof(float) = 4 and sizeof(unsigned long long) = 8.
是否存在f1 否:对于任何舍入模式,从整数到浮点的转换都在增加。只要不改变l1和l2转换之间的舍入模式,f1和f2的顺序与l1和l2相同,但在l1和l2不同的情况下,它们可能相等

是否存在f1
否:对于任何舍入模式,从整数到浮点的转换都在增加。只要不改变l1和l2转换之间的舍入模式,f1和f2的顺序与l1和l2相同,但l1和l2不同时,它们可能相等。

是的。如果浮点数表示为IEEE-754单精度数字,则其精度最多只有7位小数。因此,您可以很容易地生成两个相差100的巨大无符号长形,但它们在转换为浮点数时相等。@H2CO3问题是f1是否可能小于f2。我认为f1==f2显然是不可能的。@PascalCuoq Oops,对不起,错过了,尽管如此,无论是在硬件还是软件上,都有许多不可靠、不可靠、有缺陷的浮点实现。此外,C语言几乎不保证超出精度和范围的最低限度。我相信你可以在某个地方挖掘出一些古老的微型计算机,如果你足够努力的话,这可能会失败,但在体面的现代IEEE-754系统上,它会很好。如果浮点数表示为IEEE-754单精度数字,则其精度最多只有7位小数。因此,您可以很容易地生成两个相差100的巨大无符号长形,但它们在转换为浮点数时相等。@H2CO3问题是f1是否可能小于f2。我认为f1==f2显然是不可能的。@PascalCuoq Oops,对不起,错过了,尽管如此,无论是在硬件还是软件上,都有许多不可靠、不可靠、有缺陷的浮点实现。此外,C语言几乎不保证超出精度和范围的最低限度。我相信你可以在某个地方找到一些古老的微型计算机,如果你足够努力的话,这可能会失败,但在体面的现代IEEE-754系统上,它会很好。换句话说:如果L1>L2,那么F1>=F2,如果两个变量都转换成浮点,这将是正确的。我认为实现方式可能会有所不同,例如浮点f1=l1;如果f1L2,那么F1>=F2,如果两个变量都转换成浮点,这是肯定的。我认为实现方式可能会有所不同,例如浮点f1=l1;如果f1sizeof(float) = 4 and sizeof(unsigned long long) = 8.