Python 与 Javascript 浮点运算给出了截然不同的答案。我究竟做错了什么?

2023-12-21

Python版本 http://code.google.com/p/pyglicko/source/browse/glicko.py | JavaScript 版本 https://github.com/austinyun/JS-Glicko/blob/master/glicko.js | 白皮书 http://www.glicko.net/glicko/glicko.pdf

因此,我正在开发一个网站来计算两人游戏的 Glicko 评级。它涉及大量浮点算术(平方根、指数、除法,所有讨厌的东西),并且出于某种原因,我得到的答案与我逐行翻译的算法的 Python 实现完全不同。 Python 版本基本上给出了描述算法的原始白皮书中示例的预期答案,但 Javascript 版本有相当大的偏差。

我在翻译中犯了错误吗?还是 Javascript 的浮点数学不太准确?

Expected answer: [1464, 151.4]
Python answer: [1462, 155.5]
Javascript answer: [1470.8, 89.7]

因此,评级计算并没有那么糟糕,准确率为 99.6%,但方差却减少了 2/3!

编辑:人们指出 Pyglicko 版本中 RD 的默认值是 200。我相信这是原始实现者留在测试代码中的情况,因为测试用例是在 RD 为 200 的人身上完成的,但是显然默认值应该是 350。但是,我在 Javascript 测试用例中指定了 200,所以这不是这里的问题。

编辑:更改算法以使用映射/归约。评级不太准确,方差更准确,两者都没有明显的原因。撞墙开始。


通常,当您减去两个相似的数字时,您会遇到这样的错误 - 然后值之间通常不显着的差异会被放大。例如,如果您有两个值,在 python 中为 1.2345 和 1.2346,但在 javascript 中为 1.2344 和 1.2347,则差异分别为 1e-4 和 3 e-4(即一个是另一个的 3 倍)。

所以我会看看代码中哪里有减法并检查这些值。您可能会发现您可以(1)重写数学以避免减法(通常事实证明您可以找到一个以其他方式计算差异的表达式)或(2)关注为什么该特定点的值两种语言之间存在差异(也许其他答案确定的 pi 差异正在以这种方式被放大)。

尽管这里不太可能,但也有可能存在差异,因为某些东西在 python 中被视为整数,但在 javascript 中被视为浮点数。在Python中,整数和浮点数之间是有区别的,如果你不小心,你可以做一些事情,比如将两个整数相除以获得另一个整数(例如Python中的3/2 = 1)。而在 javascript 中,所有数字都是“真正的”浮点数,因此不会发生这种情况。

最后,计算的执行方式可能存在细微差别。但这些都是“正常的”——要获得如此巨大的差异,你也需要像我上面描述的那样发生。

PS:还要注意 Daniel Baulig 在上面的评论中所说的关于参数 rd 的初始值的内容。

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

Python 与 Javascript 浮点运算给出了截然不同的答案。我究竟做错了什么? 的相关文章

  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐