Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
Java “的含义;“总震级”;数不清_Java_Numbers - Fatal编程技术网

Java “的含义;“总震级”;数不清

Java “的含义;“总震级”;数不清,java,numbers,Java,Numbers,我被Java语言规范中“总体规模”的含义难住了: 加宽基元转换不会丢失有关数值总体大小的信息 是“数量级”还是“绝对值”?还是别的什么?来自维基百科的文章: 在数学中,大小是一个数学对象的大小,通过这一特性,可以将该对象与同类的其他对象进行大小比较 简而言之,32767的震级是32767。大小等于数字的值 在JLS规范中,我认为他们使用震级来表示数字中的位数。32767是16位有符号字段中可以容纳的最大整数。如果将32767移动到少于15位的位字段中,则该数字将不再是32767。这叫做变窄。如果

我被Java语言规范中“总体规模”的含义难住了:

加宽基元转换不会丢失有关数值总体大小的信息


是“数量级”还是“绝对值”?还是别的什么?

来自维基百科的文章:

在数学中,大小是一个数学对象的大小,通过这一特性,可以将该对象与同类的其他对象进行大小比较

简而言之,32767的震级是32767。大小等于数字的值

在JLS规范中,我认为他们使用震级来表示数字中的位数。32767是16位有符号字段中可以容纳的最大整数。如果将32767移动到少于15位的位字段中,则该数字将不再是32767。这叫做变窄。如果将32767移动到超过15位(或16位,有符号)的位字段中,则32767的值将保留。这叫做加宽


数量级是数字的加减。例如,使用以10为基数的整数,32767比3276高一个数量级。3276比327高一个数量级。

好的,这里是对正式定义的另一次尝试


如果
f(x)
是一个加宽的转换,那么在我看来,对于每个
x,它基本上意味着“抽象概念值”,而不是用于表示值的实际位序列。顺便说一句,
float->double
转换不会保留整体大小。@biziclop-如果它是
strictfp
,则它不应该丢失任何信息:“在
strictfp
表达式(§15.4)中,从float到double根本不会丢失任何信息;数值被准确地保留下来。”@AndyBrown Yes。这只是JLS中表达这一点的方式有点奇怪:首先他们声明这不会发生,然后五段之后他们添加了一条警告,呃…实际上,如果没有
strictfp
,它确实会发生。@biziclop你能举个例子来说明你所说的“抽象概念价值”是什么意思吗?@Julian正在阅读它,我可能用词不对。如果以
float
数字
200.4
为例,加宽转换将始终保留高阶数字。它可能会失去精度(低阶数字),因此您可能会得到
long
200
,但它仍然在相同的范围内。然而,如果将
200.4
转换为
字节(缩小转换),则会得到一个完全不同的数字:
-56
。这似乎与问题中引用的“幅度”的使用方式相矛盾。根据数学定义,从float到long的加宽转换可能会改变大小,因为小数点后的数字可能会在转换时丢失。不幸的是,他们在JLS中讨论的大小并不完全符合此定义。很接近,但不是很接近。@Julian实际上我是通过另一种方式得到的:long->float是一种加宽的转换,可能会丢失精度。最后一位应该是
f(x)
,而不是
f(x)=f(y)
?@Julian否,因为丢失精度意味着附近的一些值将被转换为相同的值。