printf 双精度数的舍入行为

2023-12-21

有人可以解释这种行为吗?我很清楚浮点数的机器级表示。这似乎与 printf 及其格式有关。 这两个数字都用浮点表示法精确表示(检查:乘以 64 给出一个整数)。

#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
  double x1=108.765625;
  printf("%34.30f\n", x1);
  printf("%9.5f\n", x1);
  printf("%34.30f\n", x1*64);

  double x2=108.046875;
  printf("%34.30lf\n", x2);
  printf("%9.5f\n", x2);
  printf("%34.30f\n", x2*64);
}

Output:

> 108.765625000000000000000000000000
> 108.76562
> 6961.000000000000000000000000000000
> 108.046875000000000000000000000000
> 108.04688
> 6915.000000000000000000000000000000

请注意,第一个数字向下舍入,第二个数字向上舍入。


这是“四舍五入”或“银行家四舍五入”。四舍五入表示的最后一位数字被选择为偶数,即使该数字恰好位于两者之间。

http://linuxgazette.net/144/misc/lg/a_question_of_rounding_in_issue_143.html http://linuxgazette.net/144/misc/lg/a_question_of_rounding_in_issue_143.html:
“对于 GNU C 库, printf() 使用的舍入规则是“银行家舍入”或“舍入到偶数”。这比其他一些 C 库更正确,因为 C99 规范规定转换为十进制应该使用当前的选择 IEEE 舍入模式(默认银行家舍入)。”

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

printf 双精度数的舍入行为 的相关文章

随机推荐

  • 如果我们需要更改 input_shape,为什么需要 include_top=False ?

    据我所知 输入元组是从卷积块进入的 因此 如果我们想改变 input tuple 的形状 修改卷积就有意义 为什么我们需要 include top False 并删除最后的全连接层 另一方面 如果我们有不同数量的类 Keras 可以选择使用
  • 如何在 Firebase 中验证转义的基于电子邮件的用户帐户?

    我正在使用 Firebase 简单登录的电子邮件 密码身份验证选项 我使用转义电子邮件作为键来存储用户数据 其中 字符已替换为 因为 Firebase 不允许在键中存储 而不是使用用户 ID 作为键 问题是 在安全规则中 我无法使用正则表达
  • System.NullReferenceException:未将对象引用设置为对象的实例[重复]

    这个问题在这里已经有答案了 可能的重复 NET 中的 NullReferenceException 是什么 https stackoverflow com questions 4660142 what is a nullreferencee
  • C# 桌面应用程序中的会话变量?

    我正在开发一个 C 独立的单用户桌面应用程序 需要用户登录该应用程序 我想确保当 5 分钟左右没有任何活动时 应用程序将提示用户再次登录 我想到了几种解决方案来做到这一点 但似乎效率不高 以前 在进行 Web 编程时 我能够使用会话变量来执
  • 苹果推送通知分发证书签名请求是否需要与分发证书用于签署应用程序的请求相同?

    我有一个已创建的现有应用程序 并且最近配置了推送通知 配置时 系统要求我上传证书签名请求 CSR 我不再拥有用于发布应用程序的原始 CSR 这是我需要上传到推送通知配置才能接收推送通知证书的 CSR 吗 我有带有可用私钥的分发证书 我尝试创
  • Angular 4上的动画似乎没有过渡效果

    trigger expandCollapse state open style height state close style height 0px transition open lt gt close animate 1000 使用此
  • postgres中的SQL将重复事件的日期时间转换为未来的日期时间

    我仅使用日期时间来跟踪表中每周重复发生的事件 我只关心时间和它所在的星期几 我需要能够将设置的 DATETIME 转换为当前或即将到来的未来日期 IE 如何转换存储为的日期2013 02 22 12 00 00使用当前日期到下一次出现的日期
  • 这种不良做法/反模式的名称是什么?

    我试图向我的团队解释为什么这是不好的做法 并且正在寻找反模式参考来帮助我的解释 这是一个非常大的企业应用程序 因此这里有一个简单的示例来说明所实现的内容 public void ControlStuff var listOfThings L
  • 使用 cxf 和 java 第一种方法编写异步服务

    我需要使用 cxf 和 java 第一种方法创建一个异步 Web 服务 但我无法 找到任何可以告诉我如何执行此操作的网络资源 网站吗 您能告诉我如何使用 CXF 和 java 第一种方法编写异步 Web 服务吗 Thanks Shekhar
  • FMDB开放数据库

    我正在尝试打开资源中项目中的数据库 问题是好像找不到数据库文件 我尝试使用完整路径 它有效 但这不是一个好的解决方案 我现在想知道如何打开它 我正在使用这段代码 db FMDatabase databaseWithPath bbdd sql
  • htaccess 从 url 中删除字符并重定向

    我想脱衣 来自网址 例子 mysite com something想要重定向到mysite com something 通过启用 mod rewrite 和 htaccesshttpd conf然后将此代码放入您的 htaccess und
  • Select2:如何防止标签排序

    当用户选择许多项目 标签 时 它们会自动按字母顺序排序 如何使用Select2 4 0防止自动排序并保留用户的顺序 Update 提到的 可能的重复问题 适用于旧版本的 Select2 v3 我询问版本 4 它与旧版本不同 并且提到的答案不
  • flake8 抱怨过滤器子句中的布尔比较“==”

    我在 mysql 数据库表中有一个布尔字段 table model class TestCase Base tablename test cases obsoleted Column obsoleted Boolean 要获取所有未过时测试
  • 本地修改数据的 Firebase 同步:处理错误和全局状态

    我有两个相关问题Firebase 网络平台 https www firebase com docs web s 将本地修改的数据同步到服务器 https www firebase com docs web guide offline cap
  • 不可变的@ConfigurationProperties

    Spring Boot 是否可以拥有不可变 最终 字段 ConfigurationProperties注解 下面的例子 ConfigurationProperties prefix example public final class My
  • 在xml中引用xsd时xsl转换问题

    我对 XSL 相当陌生 需要有关转换问题的帮助 我有一个由 XSD 描述的 XML 文件 我使用 XSL 文件将 XML 转换为 HTML 我想在 XML 文件中引用 XSD 但是当我这样做时 XML 不会被转换 XML 示例
  • 您可以将宽度应用于 :before/:after 伪元素 (content:url(image)) 吗?

    这是我最近的问题的补充 是否可以使用伪元素使包含元素环绕绝对定位元素 如clearfix https stackoverflow com questions 14977324 is it possible to use pseudo ele
  • Android:进度对话框在加载时更改 ProgressDialog.setMessage()

    我希望有人可以帮助我弄清楚如何仅使用一个虚拟计时器来更改进度对话框中的设置消息对话框 该虚拟计时器通过字符串数组或任何其他方式循环 例如 在加载时 它可以说正在加载 gt 构建 gt 渲染 gt 等 就像一个 1 2 秒计时器 这只是为了我
  • 为什么 DYLD_LIBRARY_PATH 没有在这里传播?

    我有一个简单的 C 程序 我试图运行该程序 该程序与我之前构建的 Boost Thread 库的版本链接 我似乎无法理解运行时库路径在 OS X 上的行为方式 由于我的 Boost 库没有RPATH 相对安装名称 https develop
  • printf 双精度数的舍入行为

    有人可以解释这种行为吗 我很清楚浮点数的机器级表示 这似乎与 printf 及其格式有关 这两个数字都用浮点表示法精确表示 检查 乘以 64 给出一个整数 include