Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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# 为什么float和int有如此不同的最大值,即使它们是';是相同的位数吗?_C#_Java_C++_Floating Point_Int - Fatal编程技术网

C# 为什么float和int有如此不同的最大值,即使它们是';是相同的位数吗?

C# 为什么float和int有如此不同的最大值,即使它们是';是相同的位数吗?,c#,java,c++,floating-point,int,C#,Java,C++,Floating Point,Int,可能重复: 您可能知道,这两种类型都是32位。int只能保存整数,而float也支持数字(如类型名称所示) 那么int的最大值是231,而float的最大值是3.4*1038,而两者都是32位,这怎么可能呢 我认为int的最大值容量应该高于浮点数,因为它不为浮点数节省内存,只接受整数。在这种情况下,我很乐意给出解释。这些都是基于IEEE754浮点规范的,这就是为什么它是可能的。请看这个。这不仅仅是关于有多少位。浮点数可能存储更高的数值,但即使在小数点之前的数字上也不精确。 考虑下面的例子: f

可能重复:

您可能知道,这两种类型都是32位。
int
只能保存整数,而
float
也支持数字(如类型名称所示)

那么
int
的最大值是231,而
float
的最大值是3.4*1038,而两者都是32位,这怎么可能呢


我认为
int
的最大值容量应该高于浮点数,因为它不为浮点数节省内存,只接受整数。在这种情况下,我很乐意给出解释。

这些都是基于IEEE754浮点规范的,这就是为什么它是可能的。请看这个。这不仅仅是关于有多少位。

浮点数可能存储更高的数值,但即使在小数点之前的数字上也不精确。 考虑下面的例子:

float a = 123456789012345678901234567890f; //30 digits
Console.WriteLine(a);  // 1.234568E+29
请注意,几乎没有保留任何精度

另一方面,整数总是精确地存储其值范围内的任何数字

为了便于比较,我们来看一个双精度浮点数:

double a = 123456789012345678901234567890d; //30 digits
Console.WriteLine(a); // 1.23456789012346E+29

请注意,保留的有效数字大约是有效数字的两倍。

提示位于“浮点”的“浮点”部分。你所说的基本上是假设一个固定点。浮点数不为小数点后的数字“保留空间”-它的位数有限(23位二进制数),并记住二的幂与之相乘。

你的直觉非常正确地告诉你,一个浮点数中不可能有比另一个浮点数更多的信息内容,因为它们都有32位。但这并不意味着我们不能使用这些位来表示不同的值

假设我发明了两种新的数据类型,
uint4
foo4
uint4
在标准二进制表示法中使用4位表示整数,因此

bits   value
0000       0
0001       1
0010       2
...
1111      15
但是
foo4
使用4位来表示这些值:

bits   value
0000       0
0001      42
0010     -97
0011       1
...
1110      pi
1111       e
现在
foo4
的值范围比
uint4
大得多,尽管位数相同!怎么用?因为有一些
uint4
值不能用
foo4
表示,所以位映射中的那些“槽”可用于其他值



int
float
也是一样的-它们都可以存储一组232个值中的值,只是不同的232个值。

从哪里获得最大浮点值3.4*10^38?大数字的浮点精度远低于int.Hmm。。。你说“浮点数”,好像你很清楚这意味着什么,但这是吗?强制性链接:假设你有一个
int
值,表示以美分为单位的价格,另一个
int
值,表示以美元为单位的价格。问题是,;美元的金额怎么可能超过美分的金额?如果你能回答这个问题,你已经回答了你自己的问题非常有趣,易于理解(虽然不是技术性的)解释。我喜欢它。关于浮动的位结构的很好的解释:您正在演示如何编写控制台。这真的能告诉我们精确性吗?