Types 在所有主要的x86系统中,双精度类型可以精确表示的最小(负)整数值是多少?

Types 在所有主要的x86系统中,双精度类型可以精确表示的最小(负)整数值是多少?,types,floating-point,double,Types,Floating Point,Double,在所有主要的x86系统中,双精度类型可以精确表示的最小负整数值是什么?特别是在同时使用JVM、MySQL、MS SQL Server、.Net、PHP、Python和JavaScript的情况下,无论它使用的是哪种类型 我之所以问这个问题,是因为我想选择一个值来表示函数返回的错误,以防它无法成功计算-这就是为什么我需要一个精确的值来100%预测精确的相等性检查。异常try-catch的工作速度似乎慢得多-这就是为什么我需要这样的东西。您的大多数语言和数据库产品将使用IEEE标准754单选和双选。

在所有主要的x86系统中,双精度类型可以精确表示的最小负整数值是什么?特别是在同时使用JVM、MySQL、MS SQL Server、.Net、PHP、Python和JavaScript的情况下,无论它使用的是哪种类型


我之所以问这个问题,是因为我想选择一个值来表示函数返回的错误,以防它无法成功计算-这就是为什么我需要一个精确的值来100%预测精确的相等性检查。异常try-catch的工作速度似乎慢得多-这就是为什么我需要这样的东西。

您的大多数语言和数据库产品将使用IEEE标准754单选和双选。在C和C++中,可以使用单扩展格式和双扩展格式,但它们是依赖于架构的格式。您的高级、平台无关的语言和数据库可能会避免暴露这些内容

根据IEEE标准754,您忽略了双精度可以存储无穷大和-无穷大,然后:

最大正常数:1.7976931348623157e+308 最小正正常值:2.2250738585072014e-308 最大次正常数:2.2250738585072009e-308 最小正次正常数:4.9406564584124654e-324 对于x86双扩展格式:

最大正常值1.1897314953723176505E+4932 最小正常态:3.36210314311209350626e-4932 最大低于正常值:3.36210314311209350608e-4932 最低阳性低于正常值:3.64519953188247460253e-4951 这是一个双重身份:

有效数字二进制:53 最小正常态数:2.225。。。10-308 最大正数1.797。。。10308 十进制有效数字:15-17 双扩展x86具有:

有效数字二进制:64 最小正常态数:3.362。。。10-4932 最大正数1.189。。。104932 十进制有效数字:18-21
根据IEEE 754,double具有52位尾数+1最高有效尾数未以iself格式表示的位,因为对于规范化数字,该位始终==1。 所以max int作为一个double是2^53-1,min one是-2^53-1,
在长刻度数字命名系统中,大约有+-8万亿或台球

在squeak Smalltalk中,我们有这个方法

maxExactInteger
    "Answer the biggest integer such that it is exactly represented in a float, and all smaller integers also are"
    ^1 bitShift: self precision
其中,包含隐含尾数的双53位尾数的精度为53。 是的,当然,2^53是精确表示的,所有较小的正整数也是如此,但2^53+1不是,它需要54位,并将四舍五入到2^53


负数也是一样,最小的是-2^53在IEEE 754浮点表示法中没有2-补码技巧,只有一个符号位。

我认为如此大的量级的值不能精确表示。我之所以问这个问题,是因为我想选择一个值来表示函数返回的错误,以防它无法成功计算-这就是为什么我需要一个精确的值来100%预测精确的相等性检查。@adam goode,这是我第一次想到的,我已经尝试过了。我记不清它到底是怎么回事,但我使用编译器的主要语言Scala拒绝了它。我通常会指出,您使用双精度中的unqiue值来表示特殊内容是错误的:虽然在我写很多C时,我会返回-1表示在查找ID时找不到。我喜欢这些天我的结构化编程语言,在这些语言中,我可以抛出一个异常,或者只返回一个元组、一个out参数或一个包含值和状态代码的结构/类。@zac bowling,我理解,对我来说,这似乎是一个卑鄙的手段。但异常的工作速度似乎要慢得多,我真的需要闪电般快速的错误处理,而且我负担不起任何显著的时间开销,因为1。这是一个数字运算任务,2。这样的函数拒绝经常发生,并且通常是连续出现的。@zac bowling,同时,使用元组而不是简单的双元组,并且有一个专用的fiekd来指示错误,看起来更脏,imho。这违反了奥卡姆的剃须刀。