热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Dart,floatfor循环会导致奇怪的结果

如何解决《Dart,floatfor循环会导致奇怪的结果》经验,为你挑选了1个好方法。

这就是双数字的工作原理.您将在使用与Dart相同的双精度的其他语言中获得相同的结果(它们被标准化为IEEE-754 64位浮点数).

关键是,例如,89.99无法用双精度精确表示.双打是二进制数,最多有53位有效位.在二进制中,89.99没有有限的表示,就像1/3不能有限地写成十进制数(0.3333333 ......它对于精确值来说永远不够).

只有有限数量的双值,在整个范围内扩展,覆盖率翻倍.因此,当您尝试将"真实"数字转换为双精度数时,计算机将舍入到与原始数字最接近的双精度值.

甚至54.99都不准确.实际的double值54.99是最接近数学数字54.99(又名5499/100)的精度值:

54.99000000000000198951966012828052043914794921875

然后你添加35,再次不能表示为double,双硬件选择最接近该值的双倍:

89.990000000000009094947017729282379150390625

由于原始54.99的不精确,这实际上是一个不同于仅用于写作的选择的双倍89.99,这是:

89.9899999999999948840923025272786617279052734375

将double转换为字符串时,选择表示的算法实际上很聪明.它选择最短的十进制表示,其中数值将四舍五入为原始双精度值.

因此,由于它们54.99 + 35不是同一个89.99,它们需要具有不同的字符串表示.字符串89.99显然是针对后者的,因此54.99 + 35需要更多的数字来区分自己.这就是尾随的00000000000001来源.

所以,简而言之,这就是双打所做的事情.在使用相同double类型的大多数其他语言中,相同的计算将得到相同的结果.



1> lrn..:

这就是双数字的工作原理.您将在使用与Dart相同的双精度的其他语言中获得相同的结果(它们被标准化为IEEE-754 64位浮点数).

关键是,例如,89.99无法用双精度精确表示.双打是二进制数,最多有53位有效位.在二进制中,89.99没有有限的表示,就像1/3不能有限地写成十进制数(0.3333333 ......它对于精确值来说永远不够).

只有有限数量的双值,在整个范围内扩展,覆盖率翻倍.因此,当您尝试将"真实"数字转换为双精度数时,计算机将舍入到与原始数字最接近的双精度值.

甚至54.99都不准确.实际的double值54.99是最接近数学数字54.99(又名5499/100)的精度值:

54.99000000000000198951966012828052043914794921875

然后你添加35,再次不能表示为double,双硬件选择最接近该值的双倍:

89.990000000000009094947017729282379150390625

由于原始54.99的不精确,这实际上是一个不同于仅用于写作的选择的双倍89.99,这是:

89.9899999999999948840923025272786617279052734375

将double转换为字符串时,选择表示的算法实际上很聪明.它选择最短的十进制表示,其中数值将四舍五入为原始双精度值.

因此,由于它们54.99 + 35不是同一个89.99,它们需要具有不同的字符串表示.字符串89.99显然是针对后者的,因此54.99 + 35需要更多的数字来区分自己.这就是尾随的00000000000001来源.

所以,简而言之,这就是双打所做的事情.在使用相同double类型的大多数其他语言中,相同的计算将得到相同的结果.


推荐阅读
  • 阿里飞猪旅行搜索技术的革新与实践
    本文由林睿(阿里飞猪)分享,经杜正海、Hoh编辑整理,并由DataFunTalk平台发布。文章探讨了旅行搜索技术从满足基本需求到集成高级功能的发展历程,特别是在阿里飞猪平台上的应用与创新。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • 本文整理了一系列Java面试问题,涵盖Java开发环境的分类、Java语言的核心特性、Linux环境下Java SE的安装步骤、常用的Java开发工具介绍,以及类与对象的基本概念等。 ... [详细]
  • 使用Python爬虫技术从网页中提取图片链接的方法与示例
    本篇文章将详细介绍如何通过Python编程语言来实现从指定网页上抓取图片链接的功能,并提供了一个实用的代码示例。 ... [详细]
  • 本文详细介绍了C#中的基本选择结构(如if、if-else、if-else-if及嵌套if)、switch结构、数组与循环控制结构(包括while、do-while、for和foreach循环)以及跳转语句(break和continue)。此外,还简要探讨了二重循环的应用和冒泡排序算法。 ... [详细]
  • 近期探讨了‘内部螺旋矩阵算法’的实现细节,并深入分析了面向对象编程中的可扩展性问题。基于这些讨论,本文通过引入桥梁设计模式对原有代码进行了优化与重构,以增强代码的灵活性和可维护性。 ... [详细]
  • 利用 Jest 和 Supertest 实现接口测试的全面指南
    本文深入探讨了如何使用 Jest 和 Supertest 进行接口测试,通过实际案例详细解析了测试环境的搭建、测试用例的编写以及异步测试的处理方法。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • 探讨了在使用Layui框架时,如何处理表格中固定列与其他列行高不一致的情况,提供了有效的解决方案。 ... [详细]
  • 本文介绍了如何通过自定义配置类,利用 `WebMvcConfigurer` 接口来扩展 Spring MVC 的功能,实现默认首页的自动跳转,同时避免使用 `@EnableWebMvc` 注解全面接管 Spring MVC 的默认配置。 ... [详细]
  • 在尝试通过HTTP请求访问位于http://www.xxx.cn/net/Clicked.asmx的Web服务时,发现输入特定参数后,偶尔会接收到不成功的响应,表现为XML格式的空字符串。此现象并非每次发生,其根本原因尚不明确。 ... [详细]
  • 本文讨论了从PHP5.6升级至PHP7过程中遇到的问题,特别是关于bcmath扩展的兼容性问题。bcmath用于执行高精度数学运算,类似于Java中的BigDecimal。升级后,在调用bcmath函数时出现了错误。 ... [详细]
  • 深入理解希尔排序算法
    本文详细介绍了希尔排序的原理及其相对于传统插入排序的优势,并通过实例解析了希尔排序的具体实现过程,包括代码示例及性能分析。 ... [详细]
  • 免费获取:全面更新的Linux集群视频教程及配套资源
    本资源包含最新的Linux集群视频教程、详细的教学资料、实用的学习课件、完整的源代码及多种软件开发工具。百度网盘链接:https://pan.baidu.com/s/1roYoSM0jHqa3PrCfaaaqUQ,提取码:41py。关注我们的公众号,获取更多更新的技术教程。 ... [详细]
  • 本文介绍了Kettle资源库的基本概念、类型及其管理方法,同时探讨了Kettle的不同运行方式,包括图形界面、命令行以及API调用,并详细说明了日志记录的相关配置。 ... [详细]
author-avatar
mobiledu2502863683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有