Google 表格比 Microsoft Excel 更准确还是更准确?

2023-12-04

我知道浮点数数值不准确的普遍问题,但我希望 Excel 和 Google Sheets 的行为相同。不幸的是,他们没有 - 请参阅以下示例:

A1: 15.525         our reference
A2: =3*5.175       should equal 15.525
A3: =A2=A1         shows TRUE, as expected, in both
A4: =A2-A1         but A2 is actually smaller in Google Sheets, by -1.78E-15 [Excel shows 0.00E+00]

B1: =ROUND(A1,2)   shows 15.53, correct, in both
B2: =ROUND(A2,2)   shows 15.53, correct, in both - surprisingly in Google Sheets, looking at A4
B3: =B2=B1         shows TRUE, as expected, in both

C1: =B1-A1         shows 0.00499999999999901, in both
C2: =B2-A2         shows 0.00500000000000078, in both
C3: =C2=C1         shows FALSE, as expected, in both

D1: =C1<0.005      consistent with C1, in both
D2: =C2>0.005      consistent with C2, but inconsistent with correct rounding in B2, in both

那么有哪些明显的问题呢?

  • A3:Google Sheets 表示差异非零的数字是相等的(shudder)
  • A4:Excel 显示表现不同的数字(C1、C2 等)之间的零差异
  • B2/D2:两轮up比四舍五入后的数字小 0.005 以上的数字

我的问题是:

  • 我应该期望两者的行为有所不同吗?
  • 差异是不同实现(可能是数字格式)的无意副产品,还是有意为之?
  • 这有记录在某处吗?

观察结果

以下观察结果是在 Google Sheets(2020 年 7 月 2 日的网页版,macOS 10.14.6 上使用 Safari 12.1.2)、Microsoft Excel 2008 for Mac 12.3.6 和 Numbers 10.0 上进行的。在 Excel 中,首选项... > 计算 >“设置显示精度”已禁用。

单元格设置:

  • A1: 15.525.
  • A2: =3*5.175.
  • A3: =A2=A1.
  • A4: =A2-A1.
  • A5: =(A2-A1).
  • A6: =A4*1000000000000000.
  • A7: =A5*1000000000000000.
  • A8: =(1/3*3-1)*POWER(10,34).

观察到的结果是:

  • A3:所有三个电子表格中的“正确”。
  • A4:所有三个电子表格中的“0”。
  • A5:Google 表格中的“0”,Excel 中的“-1.77636E-15”,Numbers 中的“0”。
  • A6:Google 表格中为“-1.776356839”,Excel 中为“0”,Numbers 中为“0”。
  • A7:Google 表格中为“-1.776356839”,Excel 中为“-1.776356839”,Numbers 中为“0”。
  • A8:Google 表格中为“0”,Excel 中为“0”,Numbers 中为“-1”。

如果单元格格式从“自动”更改为“科学”,则 Google 表格结果会发生变化:

  • A4:“-1.78E-15”。
  • A5:“-1.78E-15”。

否则,除了外观更改(例如显示“0.00E+00”而不是“0”)之外,其他单元格或电子表格中没有任何更改。

假设

上述观察结果与:

  • Google Sheets 使用 IEEE-754 64 位二进制格式,并且不会捏造舍入。 (最初显示“0”是由于自动选择定点或类似格式。)
  • Excel 使用 IEEE-754 64 位二进制格式,并根据所使用的公式进行舍入。也就是说,舍入不纯粹是被舍入的数字的函数;它是依赖于上下文的。此外,四舍五入不仅仅是为了显示;也是为了显示。它应用于单元格值,因此进一步的计算使用舍入后的结果。
  • Numbers 使用十进制浮点格式,尾数为 34 位。没有观察到捏造的舍入。

进一步的调查

The −1.776356839•10−15 value observed in Google Sheets and Excel is characteristic of the IEEE-754 64-bit binary format, so it seems quite likely they are using that format. The −10−34 value observed in Numbers is less conclusive, so the hypothesis it is using a decimal format should be investigated further.

上述注释在 Excel 中对接近零的数字进行四舍五入,四舍五入后的值用于进一步计算。另一个实验是构造一个不是 1 但显示为 1 且具有简单公式的数字,然后在进一步计算中使用该单元格来查看是否使用了舍入前或舍入后的值。

更多观察

单元格设置:

  • B1: =1/49*49-1.
  • B2: =1/49*49.
  • B3: =B2-1.

选择 49 是因为,当使用 IEEE-754 二进制 64 进行评估时,1/49*49产生一个略低于 1 的数字。(对于较小的分母,例如分母,不会发生这种情况1/3*3因为,虽然除法中有舍入,但乘法也有舍入进行补偿,产生的结果恰好为 1。49 是不会发生这种情况的最小整数。)

结果,科学格式:

  • B1:Google 表格中的“-1.11E-16”,Excel 中的“0.00E+00”,Numbers 中的“-2E-34”。
  • B2:Google 表格中的“1.00E+00”,Excel 中的“1.00E+00”,Numbers 中的“1E+00”。
  • B3:Google 表格中的“-1.11E-16”,Excel 中的“0E+00”,Numbers 中的“0.00E+00”。

同样,Google Sheets 似乎毫无恶意地使用了 IEEE-754。 Excel 似乎对结果进行了四舍五入。但是,如果添加括号,则将 B1 设置为=(1/49*49-1)或 B3 至=(B2-1),Excel 显示“-1.11E-16”。这与在第一组观察中使用括号时禁用舍入是一致的。

然而,现在我们第一次在《民数记》中看到一些恶作剧。我们期望 B1 和 B3 显示相同的结果,但事实并非如此。假设:数字在公式中使用更高的精度,但在单元格的最终结果中使用更少的精度?

The B1 result is consistent with 34 decimal digits. To 34 significant decimal digits, 1/49 is .02040816326530612244897959183673469. Then 49 times that is .99999999999999999999999999999999981. Rounding to 34 significant digits gives .9999999999999999999999999999999998, and then subtracting 1 gives −2•10−34.

进一步的实验(此处未详细说明)表明 Numbers 在内部使用 34 位十进制数字进行计算,但将最终单元格值四舍五入为 15 位十进制数字,并将其用于显示和进一步计算。

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

Google 表格比 Microsoft Excel 更准确还是更准确? 的相关文章

  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • xlwings: 删除一个列 | Excel 中的行

    如何删除 Excel 中的一行 wb xw Book Shipment xlsx wb sheets Page1 1 range 1 1 clear clear 用于删除内容 我想删除该行 我很惊讶 clear 函数有效 但 delete
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • VBA 有没有办法了解未使用的变量?

    标准 VBA 编辑器中是否有工具 方法或设置来警告已被修改的变量Dim med 但没有被使用 MZ Tools http www mztools com index aspx将搜索您的代码并告诉您哪些内容未被使用 VBA的版本可以找到her
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • JasperReports 中每个工作表属性一页

    我有一个要求 我必须在 JasperReports 中设计一个报告 该报告有 4 页 第一张纸有 5 页 类似的其他纸有一页或两页 我面临的问题是 如果我使用net sf jasperreports export xls one page
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • SQL Excel VBA 运行时错误 3709 无效连接

    这是我的第一个问题 欢迎提出建设性的批评 我正在尝试从 Excel VBA 查询 Access 数据库并将返回信息放入 Excel 范围中 我收到此错误 错误消息 运行时错误 3709 连接无法用于 执行此操作 在此情况下它已关闭或无效 语
  • 在 Excel 中使用 VBA 设置图像透明度

    有没有办法使用 VBA 脚本对图像应用一些透明度 我录制了一个 宏 但似乎没有录制艺术效果 我已经找到了如何制作形状 但没有找到图像 这需要几个步骤 将自选图形 如矩形 放置在工作表上 使用以下方法将您的实际图片嵌入矩形中 ShapeRan
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • 使用 Google 脚本移动 Google Drive 中的文件

    我正在尝试使用通过 Google 表单发布的信息创建文档 然后在创建文档后 我想将该文档移至共享文件夹中以供人们查看 目前 我的脚本从 Google Forms 链接的电子表格中获取所有信息 使用该信息 我使用以下代码来创建文档 var t
  • Vlookup 引用不同工作表中的表数据

    我想用一个VLOOKUP函数引用了放置在与所在工作表不同的工作表中的数据表VLOOKUP书面的功能 示例 在工作表 1 的单元格 AA3 中 我想插入VLOOKUP功能 我希望该函数检查单元格 M3 中的数字 在工作表 2 范围地址 A2
  • 在Excel VBA中将图像(jpg)转换为base64?

    我需要在 Excel 中转换图像 或通过VBA 转为base64 最后我将进行XML输出 我怎样才能做到这一点 我需要引用 DOM 吗 我一直在读书这个问题 https stackoverflow com questions 169907
  • Excel 接受一些字符,而 OpenXml 有错误

    我有一个字符串 我想使用 C 中的 openxml 组件将其导出到 Excel 文件 我的文本有 u001f 字符 而 openxml 对此字符有错误 错误文本 十六进制值 0x1f 是无效字符 我将该测试直接复制到 Excel 中 没有问
  • Excel 2007 从 C# get_Value 始终返回 -2146826265

    我有一个引用 Microsoft Excel 12 0 对象库的小型 C 应用程序 除此之外 它还从 Excel 单元格读取值 它从一些较旧的 Excel xls 文件和一些 2007 文件 xlsx 中读取此值 所有 xls 文件的值都会
  • 使用宏从 Excel 电子表格中删除任何非指定字符

    我正在尝试通过删除任何非标准字符来清理 Excel 中的 CSV 文件 我唯一关心保留的字符是 A Z 0 9 和一些标准标点符号 任何其他字符 我想删除 当它找到包含我未指定的任何字符的单元格时 我已经得到了以下宏来删除整行 但我不确定如

随机推荐

  • 使用 html5 canvas 将图像裁剪为非矩形形状并进行转换

    我是 html5 canvas 的新手 但我正在创建一个基于 html5 canvas 的图像裁剪器 其中包括下一个功能 它应该将图像裁剪为多边形 但不一定是矩形 裁剪图像后 应将图像转换为矩形 我尝试搜索任何满足这些功能的图像裁剪器 但没
  • jquery 中可调整大小、可拖动的对象。可能的?

    我想要一个既可以调整大小又可以拖动的对象 我需要 X Y Size 的对象 这可能吗 有一个例子http www jsfiddle net davidThomas DGbT3 1 它获取可拖动对象的 x 和 y 我怎样才能让它调整大小 Th
  • 如何保留历史 RDD 以供在给定代码中进一步使用

    var history RDD String List String sc emptyRDD val dstream1 val dstream2 val historyDStream dstream1 transform rdd gt rd
  • Android:具有不同 alpha 值的嵌套线性布局

    我有一个矩形 LinearLayout 它有一些边距 一些圆角和 0 3 的 alpha 值 在这个布局中 我有 4 种不同的布局 因为我在不同的位置显示不同的图像 我的问题是 虽然主布局是 0 3 但我希望我的孩子完全可见 或者不受其父
  • Python - 通过 Firefox 的 Tor 浏览器,无法单击按钮

    我一直在尝试通过 Tor 浏览器作为 Firefox 的代理来访问某个站点 dumpert nl 我使用 Tor 浏览器的原因是这样我每次进入网站时都可以使用不同的 IP 地址进入该网站 我知道这是可能的 但我还没有找到方法来做到这一点 我
  • 通过 RequestCultureProviders 处理路由 (URL) 中的文化

    我想创建一个适当的 requestCultureProviders 来使用以下路由模板处理 AspNetCore WebApp 中的路由文化 http url domain culture controller action 例子 http
  • 带对话框的自定义标记

    我如何实现如上所示的对话框 到目前为止 这就是我现在能做的 map addLayer id markers type symbol source markers interactive true layout text field pric
  • 刷新 chrome 页面时用户变为 null flutter web firebase

    我可以在网络中使用 Firebase Auth 正确登录和注册 当我热重新加载页面时 用户信息将保持不变并且他们保持登录状态 但是 如果我使用 Chrome 刷新页面 用户将变为空 我需要再次登录 认证服务 static Future
  • 在ios中运行一个简单的python脚本

    我想在 ios 上运行 python 脚本 我不想用 Python 编写整个应用程序 而只编写其中的一小部分 我试图理解 PyObjC 但它并不那么容易 请给我举个例子好吗 我想将以下方法的结果保存在NSString多变的 def doSo
  • Android 12 新蓝牙权限

    蓝牙是我们应用程序的主要依赖项 因此 我们已经尝试实现新的 Android 12 蓝牙权限 我们唯一的资源是Android 开发人员 Android 12 中的新蓝牙权限 就是说添加权限 android permission BLUETOO
  • 为什么我会收到 Android : 目标服务器未能响应?

    API链接 http www familybuds com storegrunt new api home validate step one platform 1 发布参数 store name abc 代码位于 GoDaddy 服务器上
  • 在 Rails 中使用 collection_check_boxes 填充表单时传递额外的属性到连接表?

    填充表单时是否可以添加额外的属性来连接表collection check boxes在 Rails 中还是我必须以不同的方式填充表单 目前我有 Product Package 和 PackageItem 模型 包包含许多产品 但也可以在包中
  • 带渐变的 SVG 路径

    目前 我有一个脚本 通过 GIMP 中的 py 插件 可以生成一个带有渐变的 SVG 路径 通过具有不同宽度和颜色的同一路径的多个路径来模拟 但是 我想知道是否有一种语法可以生成类似的内容 而无需定义多个路径 就像定义一个渐变和单一路径一样
  • 如何设置 TFS 2013 构建定义以从 Git 标签构建?

    我想在 TFS 2013 中创建一个特殊的构建定义以从标签构建 该项目中使用的源代码管理是 Git 所以 假设我有一个名为v1 0 我希望此构建定义提取与该标签对应的源并运行构建 触发器现在并不重要 甚至可以是手动的 这怎么可能 我可以看到
  • matplotlib 带有更改标签的 3D 绘图

    所以我有一个 3D 实时更新图 它一次只显示一个点 因此我可以轻松跟踪该点的运动 但问题是 无论我做什么 该点总是放置在图表的中心 并且轴上的刻度线会发生变化以实现这一点 这让我的生活变得非常困难 因为我看不到这一点 这是我的代码 from
  • 如何将节点从 div 拖放到 JStree 上? (jstree版本:3.0.4)

    使用以下代码 我可以将 JSTree 节点拖放到 div 上 然后该节点将从 jstree 中删除 我将所有删除的 jstree 节点存储在 mapOfRemovedNodes 对象中 其中节点 id 是 KEY 节点对象本身是 VALUE
  • 将代码从 VBA 运行到 VBScript 再返回到 VBA

    我正在尝试找出一种方法来调用VBScript函数使用vba in Excel 然后将一个值传递回Excel VBA 见下文 VBA在 Excel 中 Sub RunTest Dim objString as String Begin Pse
  • Java-从图像中获取像素数组

    我正在寻找获取像素数据的最快方法 形式为int 从一个BufferedImage 我的目标是能够解决像素问题 x y 从图像中使用int x y 我发现的所有方法都不会执行此操作 大多数方法都会返回int s 我只是在研究同一主题 这是访问
  • C语言中如何判断输入的内容是否为数字?

    在C的main函数中 void main int argc char argv do something here 在命令行中 我们将输入任何数字 例如1 or 2作为输入 但它将被视为 argv 参数的 char 数组 但是如何确保输入是
  • Google 表格比 Microsoft Excel 更准确还是更准确?

    我知道浮点数数值不准确的普遍问题 但我希望 Excel 和 Google Sheets 的行为相同 不幸的是 他们没有 请参阅以下示例 A1 15 525 our reference A2 3 5 175 should equal 15 5