对于接近统一的值,浮点数学是否更精确?

2024-01-05

Question

我多次被告知,如果运算的数字接近于浮点运算,则浮点运算具有最高的精度。1.0(或者有时0.1)。有没有道理呢?

澄清

我所说的“算术”是指诸如a + b, a * b, a / b, 但是也sqrt(x)和其他数学函数。

具体来说,假设所有变量都是IEEE 64 位双精度 https://en.wikipedia.org/wiki/Double-precision_floating-point_format浮点数字。

Example

在物理模拟代码中,通常通过将物理单位映射到浮点值来合并物理单位。在这里我们有很多自由,但一个选择是随从国际单位/公制 https://en.wikipedia.org/wiki/International_System_of_Units, 就像是

# Base units
m  = 1.0  # metre
s  = 1.0  # second
kg = 1.0  # kilogram
# Derived units
km = 1e+3*m             # kilometre
yr = 60*60*24*365.25*s  # year
m_sun = 1.98841e+30*kg  # mass of the sun
c = 299792458*m/s       # speed of light
...

此类代码中任何量纲变量的数值取决于单位制的选择。如果我们得到一个值x == 1.2e-9 and x应被理解为例如长度,我们知道这意味着x是1.2纳米。如果我们选择设置m = 1e-9, x相反,会得到一个值1.2,因为我们现在使用的单位系统中纳米是基本长度单位。

根据模拟中研究的物理系统,可以选择不同的“自然”单位系统。如果我们的重点是原子物理学,那么选择太阳的质量作为基本质量单位可能并不理想。那么为什么不呢?这就是我的问题。当然,所有感兴趣的群体都会有很小的数值,但那又怎样呢?浮点运算固有的不精确性是否会因处理极小/极大的数字而被放大?

我知道存在最小和最大浮点数(类似于1e-324 and 1e+308)。使用单位系统对于手头的任务来说是如此不合时宜,以至于我们的变量值超出了这些限制,这当然是具有破坏性的。不过,将值保持在这些条内,代码中的典型值是否符合顺序真的有什么区别吗?1.0, 1e±10, 1e±100?

关于数学函数的注意事项

事实上,在输入非常大/小的情况下,各种数学函数都明显不精确。举个例子,cos(1e-8) == 1,即cos()函数无法区分小于的正数1e-8。这是not与我的问题相关,作为输入cos()必须始终是无量纲的纯数,即独立于代码中定义的单位系统。所有其他三角函数也是如此,而且exp(), log()和别的。


对于接近统一的值,浮点数学是否更精确?

并不真地。

一般来说,浮点数学很好地保留了realtive精度为*, /, sqrt()覆盖浮点范围的大部分。+, -由于减去附近的值,(结果)相对精度会显着损失。

Overall, there is little difference for normal numbers for relative precision. It varies from (0.5 to 1.0] * 2-53.

绝对精度以 2 的幂为步长变化。

Floating point numbers [0.5...1.0) have the same absolute precision. For double 2-54.
Floating point numbers [1.0...2.0) have the same absolute precision. For double 2-53.
Floating point numbers [2.0...4.0) have the same absolute precision. For double 2-52.
Floating point numbers [4.0...8.0) have the same absolute precision. For double 2-51.
etc.

如果运算的数字接近 1.0(有时为 0.1),则浮点运算具有最高的精度。有没有道理呢?

略低于 2 的幂的值比略高于 2 的幂的值具有更高的绝对精度(约 2 倍)。

与微小的低于正常的值,精度会丢失,每 2 的幂一位,直到达到 0.0。


高级:当三角函数的幅值很大时,需要特别注意。高品质sin(1e10)执行内部扩展高精度参数缩减到主要 [-pi ... pi] 范围。并非所有三角函数实现都能很好地处理此步骤。因此,对于弧度参数,从主要范围开始对于保持精度很有用。对于度数参数,一个简单的fmod(deg, 360.0)是一个简单而精确的范围缩小。

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

对于接近统一的值,浮点数学是否更精确? 的相关文章

  • 浮点数和字符串转换的奇怪行为

    我已将其输入到 python shell 中 gt gt gt 0 1 0 1 0 010000000000000002 我预计 0 1 0 1 不是 0 01 因为我知道以 10 为底的 0 1 在以 2 为底的情况下是周期性的 gt g
  • 对浮点数求反总是安全的吗

    考虑 double f foo double g f where foo 可以返回分配给的任何内容f is double g f 在 C 和 C 中安全吗 对于 IEEE 754 类型 显然是这样 但 C 和 C 并不限制浮点实现 与 Ja
  • 如何使用 cout 以全精度打印双精度值?

    In my 先前的问题 https stackoverflow com questions 553974 why does int55 54 in c我正在打印一个double using cout当我没有预料到的时候 它就被四舍五入了 我
  • 在 Perl 中使用 POSIX ceil() 出现意外结果

    我一生都无法弄清楚为什么以下会产生这样的结果 use POSIX my g 6 65 my t g 4 my r t g my n r g my c ceil n print c n n 我知道印记太棒了 抱歉 我已经为我的应用程序解决了这
  • Visual Studio 将 1.1 扩展为 1.1000000000000001

    至少对我来说 这是有史以来最奇怪的 Visual Studio 2010 行为 我正在开发 MVC3 项目 我从另一个项目 也包括 VS2010 MVC1 如果重要的话 复制了一行代码 如下所示 target height height 1
  • Math.random 生成多少熵?

    我想生成一个非常大的随机数 我不需要这个号码来保证加密安全 因此 我没有使用crypto getRandomValues https developer mozilla org en US docs Web API RandomSource
  • 单元测试(有时)会因为浮点不精确而失败

    我有课Vector代表 3 维空间中的一个点 这个向量有一个方法normalize self length 1 将矢量缩小 放大为length vec normalize length length 该方法的单元测试有时由于浮点数的不精确性
  • 在Java中将浮点数组写入文件

    我正在读取 NetCDF 文件 我想将每个数组作为浮点数组读取 然后将浮点数组写入新文件 如果我读取浮点数组 然后迭代数组中的每个元素 使用 DataOutputStream 我可以使其工作 但这非常非常慢 我的 NetCDF 文件超过 1
  • 从 str 转换为 float 时保持尾随 0

    将带有尾随零的数字从字符串转换为浮点数时遇到以下问题 a 1 100 string a str a float a float string a float a 1 1 有没有办法将 str 转换为 float 同时保留末尾的尾随 0 首先
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 在 Python 中比较浮点数是否几乎相等的最佳方法是什么?

    众所周知 由于舍入和精度问题 比较浮点数是否相等有点繁琐 例如 比较浮点数 2012 年版 https randomascii wordpress com 2012 02 25 comparing floating point number
  • 如何安全地将 CGFloat 降低或提高到 int?

    我经常需要在地板或天花板上安装CGFloat to an int 用于计算数组索引 我永远看到的问题floorf theCGFloat or ceilf theCGFloat 是浮点不准确可能会带来麻烦 那如果我的CGFloat is 2
  • 如何使用 libpq 获取双精度值?

    The examples http www postgresql org docs 9 3 interactive libpq example htmllibpq 文档中展示了如何通过将整数值转换为主机字节序表示来获取整数值 我很好奇必须做
  • 在 C# 中生成随机浮点数的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 C 中生成随机浮点数的最佳方法是什么 更新 我想要从 float Minvalue 到 float Maxvalue 的随机浮点数 我在一些
  • 如何处理 PHP 中浮点数的奇怪舍入

    众所周知 浮点运算并不总是完全准确 但是如何处理它的不一致之处呢 As an example in PHP 5 2 9 this doesn t happen in 5 3 echo round 14 99225 4 14 9923 ech
  • PostgreSQL round(v numeric, s int)

    Which method http en wikipedia org wiki Rounding Tie breakingPostgres 吗round v numeric s int http www postgresql org doc
  • AXI4 流接口:如何在 HLS 中管理浮点数组以生成硬件加速器并在 RTL 项目中安全地连接它们?

    最后 我想做的是使用 Vivado Design Suite 中具有单精度浮点数组的流接口来构建硬件加速器 HLS 用户指南UG902 http www xilinx com support documentation sw manuals
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • Javascript 浮点乘以 100 仍然有错误

    我有一个货币字段的文本输入 我在字段中输入 33 91 并在尝试使用 乘以 100 技术时得到以下结果 var curWth parseInt trans withdraw index val 100 3390 var curWth par

随机推荐

  • 从数据框创建稀疏矩阵

    我正在做一项作业 尝试为 Netflix 奖项数据构建协作过滤模型 我使用的数据位于 CSV 文件中 我可以轻松地将其导入到数据框中 现在我需要做的是创建一个稀疏矩阵 其中用户作为行 电影作为列 每个单元格都由相应的评级值填充 当我尝试绘制
  • 另一个本地 gem 的“gem.add_dependency”

    我正在创建一个 gem 它依赖于另一个已发布的 gem 在my gem gemspec 我已将依赖项添加到另一个 gem gem add dependency other gem gt 1 0 0 现在 我发现了一个可以调整的功能其他宝石
  • 如何仅在增量代码上运行 Maven checkstyle 插件

    我想向我们的应用程序添加自动代码审查功能 目前我们使用maven来进行构建 我遇到了 Maven checkstyle 插件 但希望它仅在添加的增量代码上运行 而不是在旧代码上运行 我可以使用这个插件实现这个目标吗 如果是 请提供有关如何操
  • Shiny DataTable:使用按钮扩展保存完整的 data.frame

    我正在将 DataTables 与 Shiny 一起使用 通过按钮扩展 用户可以下载或打印数据表中的数据 但仅下载 打印行的可见部分 我想改变这种行为 以便可以下载包含所有行的完整 data frame 这可以通过按钮扩展实现吗 还是我必须
  • jQuery AJAX 回调中抛出的异常被吞没?

    除了向每个回调添加 try catch 块之外 还有什么方法可以处理 jQuery 中 AJAX 回调引发的异常吗 在这种情况下不会调用错误函数 ajax url myurl rails success function data thro
  • 向通用 RecyclerView 适配器添加点击侦听器

    Edit 因为它是一个通用适配器 并不简单 而且我知道添加点击侦听器的方法 在以下情况下这样做并不是一个好的做法onCreateViewHolder 所以这就是为什么我需要更好的建议 我创建了一个RecyclerView 的通用适配器 in
  • 在没有序列化器的对象上使用 JSON.stringify 需要标记为实验性的

    在Android Studio中使用kotlin插件1 3 10 当我尝试将一个简单类的对象字符串化为 JSON 时 它不会编译 此声明是实验性的 其用法必须标有 kotlinx serialization ImplicitReflecti
  • r 检查软件包版本是否大于 x.y.z

    R 包的版本号如 1 97 1 我可以检查版本号是多少 packageVersion data table 在我的计算机上 返回 1 10 0 我想要做的是检查 data table 版本是否比 1 9 7 更新 因为 1 9 7 之后的版
  • PHP 和 Javascript 交互

    我需要在这里澄清一些事情 我有一个网站 每次在浏览器中重新加载该网站时 都会更新两个变量的值 该页面显然是一个 HTML 页面 但变量是通过 javascript 函数更新的 该页面在我的服务器上运行 PHP 可以检索这些变量的值并使用它们
  • 验证命名约定? C# [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 R 中使用 ggplot2 制作默认自定义主题

    当我尝试使用应用定制主题时ggplot2它会收到如下错误 Error in FUN text 1L Theme element text has NULL property family face size hjust vjust angl
  • 图像文件中的二维码解码器(反应本机)

    我正在寻找一种从反应本机 特别是ios 中的图像文件中解码二维码的方法 我知道世博会提供相机扫描仪解决方案 但我需要文件解码器 很感谢任何形式的帮助 您可以使用jsQR 库 https github com cozmo jsQR从图像文件中
  • 将元素与 HTML 表格单元格的底部对齐

    我的 HTML 表格的一个单元格中有多个元素 我希望一些元素与单元格的底部对齐 一些元素与顶部对齐 我无法让元素与底部对齐 我的桌子是 tr td style background color 007CE2 p test br anothe
  • 带有命名空间的 XML 文档上的 XPath

    我有这个带有命名空间的 XML 文档 并且我想使用 XPath 提取一些节点 这是文件
  • Azure 函数在 azure 门户上显示 0 次执行

    我是一个蔚蓝新手 我的设置如下 我有一个 IoT 中心 一个事件中心 一个 Azure 函数 其想法是将消息发送到 IoT 中心 根据某种消息类型将它们路由到事件中心 并使用该函数处理这些事件 我创建了一个示例控制台应用程序 用于将消息从我
  • Ionic 2 范围触摸事件

    我正在尝试在输入末尾使用 Ionic 2 获取范围滑块的值 In the 文档 http ionicframework com docs v2 api components range Range output events唯一可用的事件是
  • ReaderWriterLockSlim 什么时候比简单的锁更好?

    我正在使用这段代码对 ReaderWriterLock 进行一个非常愚蠢的基准测试 其中读取的频率比写入的频率高 4 倍 class Program static void Main ISynchro test new Locked new
  • 类名中有一个“+”?

    班级名称 MyAssembly MyClass MyOtherClass 问题显然是 作为分隔符 而不是传统的点 它的作用 并查找官方文档 看看其他分隔符是否存在 这就是嵌套类型的表示方式 例如 namespace Foo class Ou
  • ASP.NET API 无法在 Azure 上发布

    我正在尝试将 C API 发布到 azure 我遵循了中的所有步骤本文档 https learn microsoft com en us aspnet core tutorials publish to azure api manageme
  • 对于接近统一的值,浮点数学是否更精确?

    Question 我多次被告知 如果运算的数字接近于浮点运算 则浮点运算具有最高的精度 1 0 或者有时0 1 有没有道理呢 澄清 我所说的 算术 是指诸如a b a b a b 但是也sqrt x 和其他数学函数 具体来说 假设所有变量都