我被"整体规模"的意义所困扰。在Java语言规范中:
扩展原始转换不会丢失有关数值整体大小的信息。
是"数量级",或"绝对值"?或其他什么?
答案 0 :(得分:3)
来自维基百科的文章Magnitude (mathematics):
在数学中,幅度是数学对象的大小,数学对象是一种属性,通过该属性可以将对象比较大于或小于同类对象。
简单来说,32767的幅度是32767.幅度相当于数字的值。
在JLS规范中,我认为他们使用幅度来表示数字中的位数。 32767是可以放入有符号16位字段的最大整数。如果将32767移动到小于15位的位字段,则该数字不再是32767。这被称为缩小范围。如果将32767移动到超过15位(或16位,有符号)的位字段,则将保留32767的值。这被称为扩大。
一个数量级是从数字中加上或减去一个数字。例如,使用基数为10的整数,32767比3276高出一个数量级.3276比327高出一个数量级。
答案 1 :(得分:1)
好的,这是另一种正式定义的尝试。
如果f(x)
是一个扩展转换,那么对于每个x <= y
,f(x) <= f(y)
。换句话说,扩展转换会保留值的部分排序。
这不是丢失有关总体幅度的信息可能意味着什么。
此框架中的精度损失意味着某些x < y
,f(x) = f(y)
。
此定义的唯一问题是(float)Double.MAX_VALUE
溢出导致Float.POSITIVE_INFINITY
,它在技术上符合上述标准,但不应该真正算作不丢失有关总体幅度的信息。