在所有主要x86系统中,Double类型可以准确表示的最小(负)整数值是多少?特别是(同时)JVM,MySQL,MS SQL Server,.Net,PHP,Python和JavaScript(无论它使用何种类型)。
我之所以这样问是因为我想选择一个值来表示错误(如果无法成功计算,则从函数返回) - 这就是为什么我需要一个确切的值对于完全相等的检查,100%可预测。异常(try-catch)似乎工作得慢得多 - 这就是我需要这样的东西的原因。
答案 0 :(得分:0)
您的大多数语言和数据库产品都将使用IEEE Standard 754单打和双打。在C和C ++中,您可以使用单扩展格式和双扩展格式,但这些是依赖于体系结构的格式。您的高级平台中立语言和数据库可能会避免暴露这些。
根据IEEE标准754,您忽略双重可以存储无限和-Infinity和NaN然后:
对于x86双扩展格式:
它有双重意义:
双扩展(x86)有:
答案 1 :(得分:0)
double(根据IEEE 754)有52位尾数+ 1个最重要的尾数位,未在格式为iself中表示(因为此位始终= = 1表示归一化数字)。
因此,max int完全可以作为double表示(2 ^ 53-1)而min min是 - (2 ^ 53-1),
大约+ - 8个四分之一(或长级数字命名系统中的台球)
答案 2 :(得分:0)
在吱吱作响的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补码技巧,只是一个符号位)。