从包含大于 Double.MaxValue 值的字符串中解析双精度值

2023-11-21

考虑下面的java代码:

String toParse = "1.7976931348623157E308"; //max value of a double in java        
double parsed = Double.parseDouble(toParse);
System.out.println(parsed);

对于提到的值1.7976931348623157E308一切都有意义,并且得到正确的输出。

现在,如果有人尝试解析1.7976931348623158E308(最后一位数字之前E递增)您仍然可以将最大值打印到控制台中!
只有在尝试解析之后1.7976931348623159E308(最后一位数字再次增加)并且更大的一位得到Infinity.
相应负值的行为相同。

Why is ... 8E308解析为... 7E308并不是Infinity?


SE 7 版本的 parseDouble 文档引用了 valueOf 文档,其中表示:

请注意,舍入到最接近的规则还意味着溢出和下溢行为;如果 s 的精确值的大小足够大(大于或等于 (MAX_VALUE + ulp(MAX_VALUE)/2),则四舍五入到双倍将导致无穷大,并且如果 s 的精确值的大小足够小(小于小于或等于 MIN_VALUE/2),四舍五入到浮点数将导致零。

这与舍入到 double 类型是按照 IEEE 754 浮点算术的通常舍入到最接近规则的说法一致。

您必须想象通过首先计算最接近的浮点数(忽略指数限制)然后检查指数是否合适来完成转换。 Double.MAX_VALUE 是该规则下与某些严格大于它的数字最接近的数字。

要确认这是正常的舍入行为,请考虑以下程序:

    public class Test {
      public static void main(String[] args) {
        double ulp = Math.ulp(Double.MAX_VALUE);
        System.out.println(ulp);
        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MAX_VALUE+ulp/2.0000000001);
        System.out.println(Double.MAX_VALUE+ulp/2);
      }
    }

它输出:

1.9958403095347198E292
1.7976931348623157E308
1.7976931348623157E308
Infinity

即使向 Double.MAX_VALUE 添加略小于半个 ulp 的值也不会改变它。添加半个 ulp 会溢出到无穷大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从包含大于 Double.MaxValue 值的字符串中解析双精度值 的相关文章

随机推荐

  • Qt 将新窗口正确放置在屏幕上,将鼠标居中,移入屏幕

    经过几个月的尝试 搜索 审查代码等 我无法找到在 QT 中正确定位新窗口的解决方案 在我最基本的情况下 我只想获取窗口的最终大小并将其置于鼠标下方居中 它将被移动以确保窗口的任何部分都不在屏幕之外 我不希望窗口出现然后移动到位 这会产生视觉
  • 在node.js应用程序中接收GCM推送通知

    我正在 node js 中构建一个命令行应用程序 并且希望接收 GCM 推送通知 命令行应用程序将与 iOS Android 应用程序使用的同一组服务进行交互 因此想要使用相同的通知服务 鉴于 GCM 可以在 iOS 上使用 因此不是 An
  • 不符合协议“NSCoding” - Swift 3

    我看到了几个与我类似的问题 然而 这些与 swift 2 1 有关 我目前正在使用 swift 3 我相信苹果已经对其进行了轻微的更改 class Person NSObject NSCoding var signature UIImage
  • 如何在 Actix-web 的 WebSocket 处理程序中正确调用异步函数

    我在这方面取得了一些进展 使用into actor spawn 但我正在努力访问ctx异步块内的变量 我将首先显示 Web 套接字处理程序的编译片段 然后是处理程序的失败片段 最后显示完整的代码示例以供参考 工作片段 聚焦比赛案例Ok ws
  • Web.config jsonSerialization maxJsonLength 被忽略

    我有一个MVC3应用程序运行在 NET 4 0当我使用时JavascriptSerializer Deserialize我收到错误 使用 JSON JavaScriptSerializer 进行序列化或反序列化期间出错 字符串的长度超过了
  • Spring:@SessionAttributes 与 HttpSession

    SessionAttributes 与 HttpSession 有什么区别 两者中的哪一个 将对象在会话中保留更长时间 在哪些情况下我必须使用其中一种 而在哪些情况下我必须使用另一种 Thanks SessionAttributes 允许在
  • MUI v5 Typescript makeStyles 从不返回

    我正在尝试将我的组件从 MUI v4 迁移到 v5 但我已经到了不知道如何迁移我的组件的地步 makeStyles成分 之前 我有过类似的工作 const useStyles makeStyles theme Theme gt paper
  • 如何将 COM 公开的 .NET 项目添加到 VB6(或 VBA)引用对话框?

    我根据异常文章创建了一个向 COM 公开的 NET 程序集构建和部署 NET COM 程序集菲尔 威尔逊着 一切工作正常 因为 NET 程序集已正确注册 COM 并且编译后的 COM 代码可以毫无问题地调用它 唯一奇怪的是 在使用 VB 6
  • Java - 下采样wav音频文件

    您好 我需要将 wav 音频文件的采样率从 44 1kHz 降采样到 8kHz 我必须使用字节数组手动完成所有工作 这是出于学术目的 我目前正在使用 2 个类 Sink 和 Source 来弹出和推送字节数组 一切都很顺利 直到我到达需要使
  • 访问列表或数据帧元素时括号 [ ] 和双括号 [[ ]] 之间的区别

    R 提供了两种不同的方法来访问列表或 data frame 的元素 and 两者之间有什么区别 什么时候应该使用其中一种而不是另一种 Answer recommended by R Language Collective R 语言定义可以方
  • 更好的图像着色逻辑/算法

    我正在开发一个 iOS 应用程序 用户可以通过触摸来更改图像的一部分颜色 例如茶杯 我使用 Floodfill 算法来填充颜色 以便用户必须点击茶杯来更改其颜色 效果很好 但是 最终颜色看起来与替换颜色没什么不同 考虑到对象的饱和度和亮度
  • 计算 MD5 哈希值是否比 SHA 系列函数消耗更少的 CPU 资源?

    在 标准 笔记本电脑 x86 硬件上计算 MD5 哈希值是否比 SHA 1 或 SHA 2 占用更少的 CPU 资源 我对一般信息感兴趣 而不是特定于某个芯片 UPDATE 就我而言 我有兴趣计算文件的哈希值 如果文件大小很重要 我们假设它
  • 如何在 Ubuntu 上设置 GOPATH 环境变量?我必须编辑什么文件?

    我正在尝试做一个go get go get github com go sql driver mysql 它失败并出现以下错误 package github com go sql driver mysql cannot download G
  • 比较 SQL 中的图像数据类型

    如何比较Image数据类型 我需要将存储在数据库中的文件与上传的文件进行比较但它说比较Image数据类型是不可能的我什至尝试转换为nchar CONVERT char 1000 FileData 谁能帮我 不要使用image数据类型已被弃用
  • 安卓打开pdf文件

    我正在开发一个 Android 应用程序 我必须打开一些文件 这是我使用意图的代码 public class FacturaActivity extends Activity public void downloadInvoice View
  • FORM布局如何从table切换到div?

    我注意到大多数人都在谈论使用 DIV 和 CSS 标签 文本框对 如何转换一张表 例如 table tr td td tr table
  • Java 中的自动委托

    我想向将在运行时生成的对象添加一些功能 然而 这个对象的接口非常大 并且不受我的控制 我想将对象包装在我自己的类中 该类添加了我想要的功能并将标准接口功能委托给原始对象 有没有什么方法可以在 Java 中执行此操作 而无需为每个对象创建 1
  • C++03 中默认初始化和值初始化之间的区别?

    我一直认为创建一个新对象总是会调用对象的默认构造函数 而构造函数是显式的还是由编译器自动生成的都没有区别 根据这个备受推崇的答案对于另一个问题 这在 C 98 和 C 03 之间发生了微妙的变化 现在的工作方式如下 struct B B i
  • 与 Objective-C 应用程序相比,捆绑的 Swift 库的文件大小开销是多少?

    我在我的一个项目中使用了 Swift 最后是时候将其上传到应用商店了 应用程序的大小是一个问题 因为下载更大尺寸的应用程序不是用户的选择 该应用程序的应用程序商店大小为 40MB 一直没问题 直到安卓版上传了 6MB 我已经在iOS应用程序
  • 从包含大于 Double.MaxValue 值的字符串中解析双精度值

    考虑下面的java代码 String toParse 1 7976931348623157E308 max value of a double in java double parsed Double parseDouble toParse