小负数四舍五入后保持符号

2024-01-24

即使舍入结果为零,MATLAB 似乎也会记住原始符号。由于小负值已四舍五入为零,因此该信号不再有意义。

代码示例:

a = - 0.001;
ar = round(a,2);
fprintf('a: %.2f. a rounded: %.2f. Zero: %.2f\n', a,ar,0);

result:

答:-0.00。四舍五入:-0.00。零:0.00

预期结果:

答:-0.00。四舍五入:0.00。零:0.00


这根本不是 Matlab 特有的。事实上,所有使用 IEEE754 进行浮点表示的程序都可能具有这种特殊性。

在 IEEE-754 格式中,有一个sign bit。在舍入操作期间该位可能保持不变。所以即使结果是纯粹的0最后,符号位保留。对于这种浮点数格式来说,这是完全正常的行为:

主条目:签名零

在 IEEE 754 标准中,零是有符号的,意味着存在 “正零”(+0) 和“负零”(−0)。多数情况 运行时环境中,正零通常打印为“0”, 负零为“-0”。这两个值在数值上表现相同 比较,但某些操作对于 +0 和 +0 会返回不同的结果 −0。例如,1/(−0) 返回负无穷大,而 1/+0 返回 正无穷大(以便保持恒等式 1/(1/±∞) = ±∞)。 其他在 x=0 处具有不连续性的常见函数可能会处理 +0 和 −0 不同地包括 log(x)、signum(x) 以及任何负数 y 的 y + xi 的主平方根。与任何 近似方案,涉及“负零”的运算可以 有时会造成混乱。例如,在 IEEE 754 中,x = y 并不 始终意味着 1/x = 1/y,因为 0 = −0 但 1/0 ≠ 1/−0。

Source: Wikipedia Floating_point Signed_zero https://en.wikipedia.org/wiki/Floating_point#Signed_zero


现在 Matlab 在零前面显示一个符号,因为您要求以浮点格式显示它(%.2f),所以Matlab尊重规范并显示符号。

如果你让Matlab选择最好的显示方式,Matlab会很聪明,把零去掉:

>> disp(ar)
     0

另外,Matlab 知道该值为0如果您查询值的符号,将返回正确的值:

>> sign(ar)
ans =
     0

Matlab 将返回-1如果它被认为是负面的并且+1如果它被认为是积极的。因此,尽管在显示时遵守 IEEE-754 规范,Matlab 不会感到困惑,并且知道该值没有有意义的符号。

总之,不用担心。它不会带来任何程序问题或计算问题。

如果您唯一的烦恼是显示,另一种解决方法可能是简单地将绝对值乘以sign由 Matlab 检测到(因为它检测到正确的符号)。 您可以创建一个自定义舍入函数,如果确实重要的话,它可以解决这个问题:

mround = @(x,n) abs(round(x,n))*sign(round(x,n)) ;
arm = mround(a,2) ;
fprintf('a: %.2f. a rounded: %.2f. Zero: %.2f\n', a,arm,0);

a: -0.00. a rounded: 0.00. Zero: 0.00

在这里,舍入操作被评估两次,因为我在内联函数中使用了它,但如果将其放入具有多行的函数中,则仅评估舍入一次,然后使用相同的方法纠正符号。

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

小负数四舍五入后保持符号 的相关文章

  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • 如何处理 PHP 中浮点数的奇怪舍入

    众所周知 浮点运算并不总是完全准确 但是如何处理它的不一致之处呢 As an example in PHP 5 2 9 this doesn t happen in 5 3 echo round 14 99225 4 14 9923 ech
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • 使用按位 OR 0 对数字进行取整

    我的一位同事偶然发现了一种使用按位或来对浮点数进行底数的方法 var a 13 6 0 a 13 我们正在谈论它并想知道一些事情 它是如何工作的 我们的理论是 使用这样的运算符将数字转换为整数 从而删除小数部分 与这样做相比 它有什么优势吗
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • 通过多次合并相同的行向量来构建矩阵

    有没有一个matlab函数可以让我执行以下操作 x 1 2 2 3 然后基于x我想建立矩阵m 1 2 2 3 1 2 2 3 1 2 2 3 1 2 2 3 您正在寻找REPMAT http www mathworks com help t
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得

随机推荐

  • 如何获取 Coldfusion 中的 URL 参数和值?

    如何获取 Coldfusion 中的 URL 参数和值 例如 我的网址是 test cfm par1 val1 par2 val2 par3 val3 是否可以直接获取第二个参数及其值 with
  • “git add --patch”包含新文件?

    当我跑步时git add p 有没有办法让 git 选择新制作的文件作为 hunk 来选择 所以如果我创建一个名为foo java 然后运行 git add p git 不会让我选择要添加到索引中的文件内容 当我尝试时git add p s
  • 如何将可观察列表转换为数组列表?爪哇

    我试图获取表视图中的所有项目并将它们放入数组列表中以进行进一步处理 这就是我想要实现的目标 但显然这是行不通的 ArrayList
  • 为什么 Channel.waitForConfirmsOrDie 不阻塞?

    我有一个发布 订阅用例 我想在发布端进行阻止 直到每个订阅者确认他们已完成处理发布者发送的消息 我 错误地 假设我可以使用 RabbitMQ 及其 Java amqp client 的 Channel waitForConfirmsOrDi
  • 如何向矢量绘图添加阴影?

    我有一个矢量可绘制对象 category bg 我将其用作 FrameLayout 的背景
  • sklearn随机森林索引feature_importances_如何实现

    我在 sklearn 中使用 RandomForestClassifier 来确定数据集中的重要特征 我如何能够返回实际的功能名称 我的变量标记为 x1 x2 x3 等 而不是它们的相对名称 它告诉我重要的功能是 12 22 等 下面是我当
  • 我应该怎么做才能从 eclipse - Android 连接到服务器?

    大师们 我对这个话题有点迷失 这是我正在尝试做的事情的细分 用户 Android 设备 将位置信息发送到服务器 gt 服务器 server 返回已使用 sql 排序的项目列表 gt db 服务器 获取表信息并返回给用户 gt 用户 Andr
  • 以编程方式配置 p2 更新存储库

    Eclipse wiki 中有一篇文章如何通过向您的产品添加静态conf 文件来配置 RCP 应用程序的用户 p2 默认存储库 Equinox p2 向 RCP 应用程序添加自我更新 配置用户的默认存储库 http wiki eclipse
  • Angular 2 单元测试 - @ViewChild 未定义

    我正在编写 Angular 2 单元测试 我有一个 ViewChild组件初始化后我需要识别的子组件 在这种情况下 它是一个Timepicker来自 ng2 bootstrap 库的组件 尽管具体细节并不重要 之后我detectChange
  • 如何覆盖 Angular 5 中的组件?

    我有一个组件
  • 有没有办法从 Angular 2+ 中删除未使用的导入和声明? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一些 Visual Studio Code 插件或其他方法可以帮助我们快速有效地整理和组织导入和
  • NodeJs、Mocha 和 Mongoose

    我有以下结构 server db mongooseTest js test userModel test js user userModel js 用他们的代码 猫鼬测试 js var mongoose require mongoose m
  • 解析 Javascript 中自定义格式的“日期和时间”字符串

    我必须解析格式为 2015 01 16 22 15 00 的日期和时间字符串 我想将其解析为 JavaScript 日期对象 对此有什么帮助吗 我尝试了一些jquery插件 moment js date js xdate js 还是没有运气
  • Grails 打包和命名约定

    包装控制器 服务等IE com company controllers com company services 这是一个好的做法还是应该避免 我遇到的另一个值得一提的问题是命名服务示例 SomthingGatewayService gro
  • 在 Android ContentProvider 中连接表和通知 ContentObservers 的最佳实践

    我有一个 ContentProvider 来处理与我的应用程序相关的所有数据插入和检索 我遵循 Virgil Doobjanschi 在 Google I O 上建议的模式 我正在使用第一种模式 我的问题是我有一个由数据库中的多个表表示的逻
  • 动画结束后的 CSS 过渡

    我有一个 css 过渡 可以在悬停时移动元素 还有一个动画 可以在悬停时旋转元素 动画上有一个等于过渡持续时间的延迟 因此在过渡到正确位置后 动画就会开始 它工作得很好 但是 当我们将鼠标移开时 动画会停止 但不会向下过渡 是否可以在鼠标移
  • 从 TypeScript->CommonJS 模块导出带有字体资源的全局样式

    我有一个 TypeScript React 项目 组织如下 tsconfig json package json yarn lock lerna json node modules packages ui library package j
  • 从 rfft2 数组创建 fft2 结果

    我试图通过操作 rfft2 的结果来重新创建完整 fft2 的结果 该文档指出 rfft2 仅计算正系数 因为当输入为实数时 负系数与正系数具有对称性 这对于大型数组非常有用 因为计算 rfft2 比完整的 fft2 快得多 所以下面的代码
  • 如何处理 MySQL 多边形重叠查询?

    例如 我有一个用户表 每个用户都是地图上的一个 正方形 或圆圈 我想找到这样的用户overlap地图上的另一个广场 MySQL 5 6 目前支持此功能吗 MySQL 的开发版本怎么样 请注意 我不是在寻找 查找在该正方形内有一个点的用户 我
  • 小负数四舍五入后保持符号

    即使舍入结果为零 MATLAB 似乎也会记住原始符号 由于小负值已四舍五入为零 因此该信号不再有意义 代码示例 a 0 001 ar round a 2 fprintf a 2f a rounded 2f Zero 2f n a ar 0