又一个浮点问题

2024-01-04

我已经阅读了这里有关浮点的大部分帖子,并且我了解使用 IEEE 754(并且仅根据以二进制存储数字的性质)无法表示某些分数的基本问题。我试图弄清楚以下问题:如果Python和JavaScript都使用IEEE 754标准,为什么在Python中执行以下内容

.1 + .1

结果是 0.20000000000000001(这是预期的)

在 Javascript 中(至少在 Chrome 和 Firefox 中),答案是 0.2

然而表现

.1 + .2

两种语言的结果都是 0.30000000000000004

此外,执行 var a = 0.3;在 JavaScript 中并打印结果 0.3

在 Python 中执行 a = 0.3 会得到 0.29999999999999999

我想了解这种行为差异的原因。

此外,许多关于 OS 的帖子都链接到 Java BigDecimal 的 JavaScript 端口,但该链接已失效。有人有副本吗?


在 Python 中执行 a = 0.3 结果为 0.29999999999999999

不完全是——看:

>>> a = 0.3
>>> print a
0.3
>>> a
0.29999999999999999

如你所见,printing a确实显示0.3-- 因为默认情况下print输入表达式时,四舍五入为 6 或 7 位小数(此处a是一个单变量表达式)在提示符处显示结果的位数是两倍多(从而揭示了浮点的内在局限性)。

JavaScript 关于如何显示数字的舍入规则可能略有不同,舍入的确切细节足以解释您观察到的差异。请注意,例如(在 Chrome javascript 控制台上):

> (1 + .1) * 1000000000
  1100000000
> (1 + .1) * 100000000000000
  110000000000000.02

看?如果你设法看到更多数字,就会发现异常现象(这不可避免地会出现)are那里)也变得可见。

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

又一个浮点问题 的相关文章

随机推荐

  • 使用 C 语言堆栈的计算器

    我正在尝试用 c 创建一个计算器 它可以优先计算并获得正确的结果 例如 5 5 3 3 gt 9 1 2 3 gt 9 我下面的代码可以计算这些示例 但对于这样的事情 2 5 2 5 我的程序给出了错误的答案 我用的是2个堆栈 一种用于操作
  • Laravel API 注册用户 - 检查重复电子邮件

    我正在使用 Laravel 5 5 API 路线routes api php像这样注册新用户 Route post users function Request request user new User if Input get name
  • 未设置对象变量或 With 块变量(错误 91)

    我有以下代码 Sub AddSources Dim pubPage As Page Dim pubShape As Shape Dim hprlink As Hyperlink Dim origAddress As String Dim e
  • mac osx:无法使用 virtualenv

    我正在尝试使用 virtualenv 创建一个环境 virtualenv test New python executable in test bin python Error Errno 2 No such file or directo
  • jquery从外部页面循环链接到特定幻灯片?

    仔细研究了所有其他问题 但我无法弄清楚这一点 我有一个主页 其中包含我使用 jquery 循环插件的另一个页面的某些幻灯片 我需要做的是将主页上的链接直接链接到不是组中第一张幻灯片的幻灯片 没什么那么复杂 我的主页上有一个这样的链接 a h
  • PHP preg_replace 的 JavaScript 等效项

    我一直在寻找 PHP 的 js 等效项preg replace功能和我到目前为止发现的只是string replace 但是我不知道如何将我的正则表达式转换为 JavaScript 这是我的 PHP 代码 preg replace str
  • ios 7 模拟器不会为针对 ios 6.1 sdk 编译的应用程序提供回退用户界面

    我们的 ios6 1 sdk 编译的应用程序在 ios 6 1 iPhone 4 4s 和 5 设备上运行良好 当在 ios7 iphone 5s 上运行该应用程序时 用户界面仍然看起来像 ios 6 黑色按钮等 但我们对大部分内容都很好
  • 找不到协议socket.getprotobyname

    我正在尝试连接到rabbitMQ服务器 但它在与a的连接时始终失败socket error protocol not found错误 In 1 import pika In 2 pika BlockingConnection pika Co
  • Python PIL 错误地解码 TIFF 颜色(使用不正确的色彩空间)?

    当我使用PIL 1 1 7加载 TIFF 图像时 颜色空间似乎错误 这是怎么回事 The tiff是使用创建的convert test jpg test tiff 但其他 tiff 文件似乎也会发生 可以在以下位置找到 http hul w
  • 以编程方式对 JTable 进行排序

    有没有办法以编程方式对 JTable 进行排序 我让 JTable 的排序工作 使用 setRowSorter 这样当用户按下任何列时 表就会被排序 我知道 SWingX JXTable 可能会工作 但我不想经历这个麻烦 因为其他一切现在都
  • Android 通知有一个彩色图标,而不是变成白色

    我的 Android 应用使用 Firebase Cloud Messaging 进行通知 当收到通知时 该图标不会像其他图标一样变成白色 我在用着targetSdkVersion 23 我的清单中有这个
  • 正则表达式: ?: 符号(问号和冒号符号)[重复]

    这个问题在这里已经有答案了 我有以下 Java 正则表达式 它不是我编写的 我正在尝试修改 class map s match all s match any s x21 x7e 1 40 它类似于this one https stacko
  • 如何配置 php.ini 以使用 gmail 作为邮件服务器

    I want to learn yii as my first framework And I m trying to make the contact form work But I got this error 我已经配置了 php i
  • 通知通过旧意图附加

    我正在通过以下代码在 BroadcastReceiver 内创建通知 String ns Context NOTIFICATION SERVICE NotificationManager mNotificationManager Notif
  • 像导航抽屉一样实现 Gmail 平板电脑

    我正在研究 Gmail 应用程序的平板电脑设计 在那里面Navigation Drawer实施与其他不同 我已附上图片供您参考 而且当我展开抽屉时 它应该像正常的导航抽屉行为一样发生 我想以同样的方式实施 我正在寻找 但我只找到了这个lin
  • C++ STL 分配器与 new 运算符

    根据C Primer第4版 第755页 有一条注释说 现代 C 程序通常应该使用分配器类 来分配内存 它更安全 更灵活 我不太明白这个说法 到目前为止 我读过的所有材料都教授使用new在C 中分配内存 书中展示了向量类如何使用分配器的示例
  • 创建一个 PHP 文件来下载某个站点的所有链接

    我最近在我的 Firefox 中安装了附加组件 DownThemAll 当我看到它下载大量的 pk3 文件 开源第一人称射击游戏的地图文件 时 我想知道我是否可以使用 PHP 做同样的事情 这就是我的想法 foreach glob http
  • gitignore 除了子子文件夹中的文件之外的所有文件

    我已经尝试了 gitignore 的多种组合 但没有一个能满足我的需要 我有这棵树 jobs jobs projecta config xml jobs projecta garbage jobs projecta more garbage
  • 如何从 jar/bat/ 运行独立的 TestNG 项目

    我有一个 TestNG 项目 没有任何主类 目前它像 Run As TestNG 一样运行 我想将其导出为可运行的 jar 或 jar 以便任何人都可以从命令行输入命令并开始运行测试用例 有人可以帮我解决这个问题吗 或建议任何其他方式以可运
  • 又一个浮点问题

    我已经阅读了这里有关浮点的大部分帖子 并且我了解使用 IEEE 754 并且仅根据以二进制存储数字的性质 无法表示某些分数的基本问题 我试图弄清楚以下问题 如果Python和JavaScript都使用IEEE 754标准 为什么在Pytho