double在java中的数学表示

double在java中的数学表示,java,math,floating-point,Java,Math,Floating Point,我想指定一个集合,它完全覆盖double/float的数字范围 对于Integer这很容易,因为它们都是从Integer.MIN\u VALUE到Integer.MAX\u VALUE的自然数 整数={xeℕ | x≤ 2147483647x≥ -2147483648} 对于double和float来说,由于数据类型的精确性,难度更大 编辑: 要求“数学表示法”可能有点不精确。那么我需要什么: 我正在寻找符合这种模式的定义: Double={xeℝ | x≤ 2-1022x≥ -2-1074{在

我想指定一个集合,它完全覆盖double/float的数字范围

对于
Integer
这很容易,因为它们都是从
Integer.MIN\u VALUE
Integer.MAX\u VALUE
的自然数

整数={xeℕ | x≤ 2147483647x≥ -2147483648}

对于
double
float
来说,由于数据类型的精确性,难度更大

编辑: 要求“数学表示法”可能有点不精确。那么我需要什么:

我正在寻找符合这种模式的定义:

Double={xeℝ | x≤ 2-1022x≥ -2-1074{在此插入进一步的条件}


那么,极值是和。由于计算机是离散的实体,实数是连续的,所以在这个范围内存在“漏洞”


血淋淋的细节在里面。

只是给你一个想法,忽略常量和一些特殊情况(正常化、隐藏、逐渐下溢…-你可以计算出细节),可表示的数字基本上是

M * 2^E where MMIN <= M <= MMAX and EMIN <= E <= EMAX

M*2^E其中MMIN没有无穷大和像NaN这样的特殊值,实值实际上是有理数

  • 双_法线={x∈ ℚ | x=(-1)符号×1.尾数×2exp-偏差,1≤ 经验≤ 2046}
  • 双_次正规={x∈ ℚ | x=(-1)符号×0.尾数×2-1022}
  • Double=双正常值⋃ 双_次正态⋃ {0}

这可能会有帮助:您接受什么规格?例如,“由IEEE 754-2008浮点格式表示的所有数字的集合”是否是一个规范