为什么 uint64_t 无法正确显示 pow(2, 64) - 1 ?

2024-02-14

我试图理解为什么uint64_t类型无法显示pow(2,64)-1适当地。 cplusplus标准是199711L。

我检查了pow()C++98 标准下的函数是

double pow (double base     , double exponent);
float pow (float base      , float exponent);
long double pow (long double base, long double exponent);
double pow (double base     , int exponent);
long double pow (long double base, int exponent);

所以我写了下面的片段

double max1 = (pow(2, 64) - 1);
cout << max1 << endl;

uint64_t max2 = (pow(2, 64) - 1);
cout << max2 << endl;

uint64_t max3 = -1;
cout << max3 << endl;

输出是:

max1: 1.84467e+019
max2: 9223372036854775808
max3: 18446744073709551615

浮点数的精度有限。

在您的系统上(通常假设为 binary64 IEEE-754 格式)18446744073709551615不是一个在中具有表示形式的数字double格式。有表示的最接近的数字恰好是18446744073709551616.

将两个大小截然不同的浮点数相减(或相加)通常会产生错误。对于较小的操作数,此错误可能很重要。如果是18446744073709551616. - 1. -> 18446744073709551616.减法的误差为 1,实际上与较小的操作数的值相同。

当浮点值转换为整数类型并且该值无法适合整数类型时,程序的行为是未定义的 - 即使整数类型是无符号的。

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

为什么 uint64_t 无法正确显示 pow(2, 64) - 1 ? 的相关文章

随机推荐

  • 如何在 Safari 浏览器上获取 WebRTC 日志

    我一直在尝试获取在 safari 浏览器上运行的 Web 应用程序的 webrtc 日志 类似于我们通过转到页面在 Firefox 中获取的日志about webrtc并在 chrome 上使用chrome webrtc internals
  • 将函数传递给 Spark:引用整个对象有什么风险?

    根据将函数传递给 Spark https spark apache org docs latest programming guide html resilient distributed datasets rdds 它声称 accessi
  • 如何更改 MySQL 中的 root 用户名

    我在 Ubuntu 中运行 MySQL 默认安装 我如何更改用户名root对于另一个 比方说admin 最好是从命令行 连接MySQL后运行 use mysql update user set user admin where user r
  • 为什么opencv中色调范围是0-180°

    谁能向我解释为什么 OpenCV 中 HSV 图像的色调值只能达到 180 而不是完整的 360 我在某处发现 OpenCV 使用 180 圆柱体 但我无法真正想象出这样的圆柱体 提前致谢 J 尝试将 360 放入 uchar 所以 只需将
  • 在 EC2 终止时调用脚本

    我必须在 AWS 自动缩放缩减事件期间采取某些操作 ec2 实例应该能够将一些日志和报告保存到 S3 存储桶 这可能需要 5 到 15 分钟 我已经有一个在终止时调用的脚本 ln s etc ec2 termination etc rc0
  • 使用 HoC 时如何正确分配通用 props?

    所以我有一个组件 这个组件被传递给一个 HOC 它应该增强原始组件 我声明了组件正在接收的 props 的类型 但我仍然收到错误 TS2741 其中显示 Property auth is missing in type but requir
  • 该数组是静态的,但数组大小直到运行时才知道。这怎么可能?

    这已经困扰我一段时间了 它涉及我 缺乏 对静态和动态内存分配之间差异的理解的核心 下面的数组是一个普通的静态数组 这应该意味着内存是在编译时分配的 对吗 然而 我已经将其设置为用户在运行时输入数组大小 include
  • 无法加载文件或程序集“Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一

    我有一个 WinJS 项目 之前使用 VS 2013 在 Windows 8 1 上构建 最近 我通过创建一个空白的 Javascript 通用 Windows 10 项目 然后添加旧项目中的所有文件 将该项目升级到通用 Windows 1
  • 如何将嵌入式 Youtube 播放器静音?

    我正在尝试 Youtube 播放器 但我无法让它默认静音 function onPlayerReady player playVideo Mute player mute player setVolume 0 如何从一开始就将其静音 Fid
  • 模拟类方法中的函数

    我想在 Django 项目中测试类方法时模拟在类方法中调用的函数 考虑以下结构 应用程序 utils py def func return resp outcome is a HTTPResponse object 应用程序 模型 py f
  • 如何让 BindingSource 知道其 DataSource 的变化?

    我有一个 someBindingSource DataSource someDataSource 我也这样做 someDataSource foo foo does new对于具有不同数据的另一个数据源 我认为每次数据源更改时都进行分配是不
  • 中断等待用户输入的线程,然后退出应用程序

    我有两个线程正在运行 userInputThread等待用户从命令行输入并interrupterThread试图打断userInputThread启动后1秒 显然你不能中断被阻塞的线程System in 另一个答案建议关闭System in
  • 将 Git Repo 转换为 Darcs

    我想将 git 存储库移至 darcs 我无法找到解释如何执行此操作的文档或项目 看起来大多数用户都想走另一条路 此外 能够从 darcs 控制 git repo 会很酷 git fast export http git scm com d
  • 在两个类之间共享变量

    我在 1 个项目中有两个不同的 cs 窗口 每个人都运行我程序的不同部分 但现在我需要在Form cs中使用mainwindow cs的变量 i 这个变量一直在变化 我该怎么做 主窗口 CS namespace samples using
  • Apache 反向代理 Unix 套接字

    我正在尝试使用 unix 套接字在 Apache 2 4 7 中设置 ProxyPass 到 puma 服务器的 Rails 应用程序 我不断收到 500 内部错误 当我检查 apache 日志时 我收到以下消息 没有协议处理程序对 URL
  • Zend 框架:headTitle()->append() 问题

    有谁遇到这个问题吗 在我的layout phtml 中我有 然后在index phtml中我有 我希望 当我转到索引操作时 标题应该是 控制应用程序 客户端列表 但我有 客户端列表控制应用程序 到底是怎么回事 我怎样才能解决这个问题 hea
  • 如何更改 appengine 应用程序的所有者(将其移动/出售给新公司)

    我开发了一个 AppEngine 应用程序 并将其转移到另一家公司 并且我想在转移到另一家公司完成后从该应用程序中删除我自己的个人访问权限 我转移所有权的第一步是邀请其他人作为具有 所有者 角色的管理员 但是 转移后 在管理 权限控制台中我
  • @RestController 和 @RequestMapping 注解所采用的参数之间的区别?

    里面的参数是什么意思 RestController path 做 它不设置基本路径吗 RequestMapping path 有什么不同 RestController base path 取自Spring文档 https docs spri
  • 如何使用VSCode集成终端进行调试?

    当我在 VS code 上调试时 它会打印到 gnome 终端 有时这使得很难同时跟踪代码和终端 是否可以打印到集成终端而不是外部终端 要告诉 VS Code 使用集成终端进行调试 您必须在启动配置中指定它 vscode launch js
  • 为什么 uint64_t 无法正确显示 pow(2, 64) - 1 ?

    我试图理解为什么uint64 t类型无法显示pow 2 64 1适当地 cplusplus标准是199711L 我检查了pow C 98 标准下的函数是 double pow double base double exponent floa