机器精度和双精度型的最大值和最小值

2023-12-05

(1) 我遇到过几种将 epsilon 添加到非负变量以保证非零值的情况。所以我想知道为什么不加上数据类型可以表示的最小值而不是epsilon呢?这两者能解决什么不同的问题?

(2) 我还注意到双精度类型的最大值的倒数大于其最小值,并且其最小值的倒数是 inf,远大于其最大值。计算其最大值和最小值的倒数有用吗?

(3)对于一个很小的double类型的正数,计算它的倒数,当它的倒数开始没有意义时,它是多小?为倒数设置上限是否更好?界限是多少?

感谢致敬


Epsilon

Epsilon 是可以与 1.0 相加并产生与 1.0 不同的结果的最小值。正如 Poita_ 所暗示的,这对于处理舍入误差很有用。情况非常简单:普通浮点数的精度保持固定,无论数字的大小如何。稍微不同地说,它总是计算出相同数量的有效数字。例如,一个典型的实现double将有大约 15 位有效数字(即 Epsilon = ~1e-15)。如果您使用 10e-200 范围内的数字,则它可以表示的最小变化约为 10e-215。如果您使用 10e+200 范围内的数字,则它可以表示的最小变化约为 1e+185。

有意义地使用 Epsilon 通常需要将其缩放到您正在使用的数字范围,并使用它来定义您愿意接受的范围(可能是由于舍入误差),因此如果两个数字落在该范围内,您假设他们可能真的平等。例如,对于 1e-15 的 Epsilon,您可能决定将彼此在 1e-14 范围内的数字视为相等(即,有效数字已因舍入而丢失)。

可以表示的最小数字通常会比该数字小得多。具有相同的典型double,通常约为 1e-308。这相当于 Epsilonif您使用的是定点数而不是浮点数。例如,曾经有不少人对各种图形使用定点。典型的版本是将 16 位整数分解为小数点前 10 位和小数点后 6 位。这样的数字可以表示大约从 0 到 1024 的数字,小数点后大约有两位(十进制)数字。或者,您可以将其视为有符号,从(大约)-512 到 +512,同样在小数点后保留大约两位数字。

在这种情况下,缩放因子是固定的,因此两个数字之间可以表示的最小差异也是固定的 - 即 1024 和下一个更大的数字之间的差异与 0 和下一个更大的数字之间的差异完全相同。

倒数

我不确定您到底为什么关心计算极大或极小数字的倒数。 IEEE 浮点使用非正规数,这意味着接近范围限制的数字会失去精度。基本上,数字分为指数和尾数。指数包含数字的大小,有效数包含有效数字。每个都用指定的位数表示。在通常情况下,数字是标准化的,这意味着它们与我们在学校学到的科学记数法有些相似。在科学记数法中,您始终会调整有效数和指数,以便小数点前恰好有一位,因此(例如)140 变为 1.4e2,20030 变为 2.003e4,依此类推。

将其视为浮点数的“标准化”形式。但是,假设您的指数仅限于 2 位数字,因此它只能在 -99 到 +99 之间运行。还假设您最多可以有 15 位有效数字。在这些限制内,您可以生成类似 0.00001002e-99 的数字。这可以让您表示小于 1e-99 的数字,但代价是损失一些精度 - 您使用了 5 位有效数来表示大小,而不是 15 位精度,因此只剩下 10 位数字这确实很重要。

除了它是二进制而不是十进制之外,IEEE 浮点的工作原理大致如此。 当您接近范围的末尾时,数字的精度越来越低,直到(在范围的最末端)只剩下一位精度。

如果你取那个只有一位精度的数字,并取它的倒数,你会得到一个非常大的数字 - 但由于你只从一位精度开始,所以结果也只能有一位精度。虽然比没有结果稍好一些,但仍然接近于毫无意义。您已达到位数所能表示的极限;解决这个问题的唯一方法就是使用更多的比特。

倒数(或其他计算)实际上没有任何一个点“不再有意义”。这并不是一个严格的界限,即一个结果有意义,而另一个结果则没有意义。相反,它是一个斜率,其中一个结果可能具有 15 位精度,另一个结果为 10 位,第三个结果只有 1 位。“有意义”与否主要取决于您如何解释该结果。为了获得有意义的结果,您需要清楚地了解最终结果中有多少位数字是真正有意义的。

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

机器精度和双精度型的最大值和最小值 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 嵌套 lambda 表达式会在 Eclipse Luna 中导致警告

    我已经在我的 MAC OSX 上使用 Java8 安装了 Eclipse Luna 当我编写简单的嵌套 Lambda 表达式时 它会发出以下警告 Recovered Internal inconsistency detected durin
  • 如何使用外部样式设置自定义聚合物元素的内部元素的样式?

    无法使用 Shadow DOM 和 Polymer 1 x 或 2 x 设置元素样式 考虑 Polymer 2 0 中的以下自定义元素
  • org.postgresql.util.PSQLException:在此 ResultSet 中找不到列名 usuario

    我收到以下错误 org postgresql util PSQLException 在此 ResultSet 中找不到列名 usuario 但是 我在适当的类中正确声明了以下列 usuario UsuariosGruposDAO class
  • @State 和 @ObservedObject 有什么区别,它们都可以用来持久化状态吗?

    当我第一次在 Google 上搜索 State vs ObservedObject 时result来自 Hacking with Swift 它说的是 ObservedObject 这与 State 非常相似 只不过现在我们使用外部引用类型
  • JavaScript 函数队列

    我有大量的函数需要连续运行 但不能在其他函数完成之前运行 我需要的是一种方法 将这些函数排队 仅在前一个函数成功完成后运行 有任何想法吗 Function1 Function2 Function3 Function4 Function5 你
  • 具有 style 属性的元素的 CSS 选择器

    我有一个具有以下样式的元素 ul class textboxlist bits style background color transparent 现在我想根据样式属性选择元素 CSS 选择器ul style background col
  • Python 递归数独求解器不返回解决方案

    我尝试优化this代码和我的最终代码如下所示 import numpy as np sudoku np array 0 9 0 0 5 0 6 0 8 0 0 0 7 1 0 3 5 0 2 1 0 0 0 0 7 0 4 0 0 1 5
  • 测试迭代指针之间的关系是否安全?

    请考虑一系列Thing 这是一种堆栈 它是由thingsBottom 其空端由thingsTop EDIT 每次我想将某些东西推入列表时 我都会这样做 thingsTop newThing thingsTop 我想使用指针从末尾到开头迭代它
  • 对尚未进行 OCR 处理的 PDF 进行批量 OCR 处理

    如果我有 10 000 个 PDF 其中一些已进行 OCRed 其中一些有 1 页已进行 OCRed 但其余页面尚未进行 我如何才能浏览所有 PDF 并且仅对尚未进行 OCRed 的页面进行 OCR完成了吗 这正是我想要的 我有数千个扫描的
  • 单元测试 VSTO 项目

    在我遵循的大多数单元测试教程中 它让我创建第二个单元测试项目 然后将测试项目中的解决方案 项目引用添加到另一个项目 我有一个 VSTO 插件 当我添加引用时 我没有看到 解决方案 gt 项目 下列出的任何内容 为什么是这样 我还能如何添加对
  • Swift UIAlertController 获取文本字段文本

    当按下 输入 按钮时 我需要从警报视图中的文本字段中获取文本 func inputMsg var points var outOf var alertController UIAlertController title Input View
  • 面板无法在使用 JQuery Mobile 的所有页面中工作

    大家好 朋友们 我是 jQuery Mobile 的新手 正在尝试通过使用 jquery mobile 创建网站来学习东西 问题是我用过data role panel 在我的页面上显示导航它工作正常 但是当我跳转到同一 HTML 文件中的另
  • 帮助从外部网站获取 Json 格式数据

    我正在尝试从该网站获取 Json 格式数据 http www livetraffic sg feeds json 但是 当我使用 ajax 时 我在 chrome 控制台中遇到了这个特殊错误 错误 XMLHttpRequest 无法加载 A
  • 如何在 Windows 中不输入 python 来运行 python 脚本

    假设我在某个目录中有一个名为 myfile py 的 python 文件 如何直接调用 python 文件而不调用 python myfile py and not python myfile py Edit 更准确地说 仅在命令行中输入文
  • 在函数中返回大对象

    比较以下两段代码 第一段使用对大对象的引用 第二段将大对象作为返回值 对 大对象 的强调是指 不必要地重复对象的副本会浪费周期 使用对大对象的引用 void getObjData LargeObj a a reset a fillWithD
  • 从下拉选择更新图表

    我有一个 JavaScript 文件app js和一个 php 文件data php app js使用 JSON 输出中的数据创建图表data php See app jsbelow document ready function ajax
  • 将事件转换为任务的可重用模式

    我想要一段通用的可重用代码将 EAP 模式包装为任务 类似于什么Task Factory FromAsync为BeginXXX EndXXXAPM模式 E g private async void Form1 Load object sen
  • 带有标志 FLAG_ACTIVITY_CLEAR_TOP 的活动 (android)

    我接连发起了一系列活动 但在其中一项活动中 我需要使用标志启动该特定活动FLAG ACTIVITY CLEAR TOP 这样它将完成前面的所有活动并开始 我面临的问题是 我不想完成堆栈中的一项活动 它应该存在于新启动的活动的后面 假设我有活
  • azure webapp webjob 节点版本

    如何定义用于运行 azure webjobs 的节点版本 服务器当前使用 v0 11 执行我的代码 但由于我使用需要节点 gt 8 的功能而失败 Web 应用程序本身在节点 8 上运行得很好 但 webjobs 的版本似乎独立于 Web 服
  • 机器精度和双精度型的最大值和最小值

    1 我遇到过几种将 epsilon 添加到非负变量以保证非零值的情况 所以我想知道为什么不加上数据类型可以表示的最小值而不是epsilon呢 这两者能解决什么不同的问题 2 我还注意到双精度类型的最大值的倒数大于其最小值 并且其最小值的倒数