热门标签 | 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类型的大多数其他语言中,相同的计算将得到相同的结果.


推荐阅读
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
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社区 版权所有