为什么IEEE754单精度浮点数只有7位精度?

2024-01-03

为什么单精度浮点数具有 7 位精度(或双倍 15-16 位精度)?

谁能解释一下我们如何根据分配给 float(Sign(32) Exponent(30-23), Fraction (22-0)) 的 32 位得出这一点?


尾数的 23 个小数位 (22-0) 出现在内存格式中,但总精度实际上是 24 位,因为我们假设有一个前导 1。这相当于log10(2^24) ≈ 7.225小数位。

双精度浮点型的小数部分有 52 位,加上前导 1 就是 53 位。因此 double 可以容纳log10(2^53) ≈ 15.955十进制数字,不完全是 16。

注意:前导 1 不是符号位。它实际上是(-1)^sign * 1.ffffffff * 2^(eeee-constant)但我们不需要存储分数中的前导 1。符号位仍必须被存储


有一些数字不能表示为 2 的幂和,例如 1/9:

>>>> double d = 0.111111111111111;
>>>> System.out.println(d + "\n" + d*10);
0.111111111111111
1.1111111111111098

如果一个金融程序一遍又一遍地进行这种计算而不进行自我修正,最终就会出现差异。

>>>> double d = 0.111111111111111;
>>>> double sum = 0;
>>>> for(int i=0; i<1000000000; i++) {sum+=d;}
>>>> System.out.println(sum);
111111108.91914201

经过 10 亿次求和后,我们损失了超过 2 美元。

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

为什么IEEE754单精度浮点数只有7位精度? 的相关文章

  • Typescript:隐式无参数函数类型

    我想要作为参数给出的函数的限定类型 我希望这种类型要么是一个没有参数的函数 返回一个包含参数的 void 函数 动作 要么是它返回自身的 void 函数 这是我想使用的代码 interface JsonArray extends Array
  • C 中的浮点运算是否具有结合律?

    加法在数学上具有结合律 a b c a b c 在一般情况下 此属性不适用于浮点数 因为它们表示有限精度的值 作为优化的一部分 从 C 程序生成机器代码时 编译器是否允许进行上述替换 C标准中到底在哪里说的 不允许编译器执行 优化 这将导致
  • 在 Symfony3 中覆盖 Doctrine2 类型

    我想用Carbon http carbon nesbot com docs 我的 Symfony 3 2 应用程序中的对象而不是 SPL DateTime 对象 我发现了一组 DoctrineExtension 类here https gi
  • 如何定义与更高类型类型(类型构造函数)绑定的上下文

    我尝试过以下方法 def test Option T Ordering value1 Option T value2 Option T val e implicitly Ordering Option T compare value1 va
  • 您可以为 None 指定类型参数或告诉编译器它是一个 Option[String] 吗?

    我想知道我是否可以在我的代码中写这样的东西 None String 我很惊讶没有人提到它的存在Option empty scala gt Option empty String res0 Option String None 请注意 在许多
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 将浮点变量显示为十六进制整数会扰乱相邻整数

    我有这个简单的程序 include
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • Scala:解决“非法循环引用”

    我正在尝试实现一个基于 HashMap 的树 它支持给定根键的 O 1 子树查找 为了实现这个目标 我正在努力做到以下几点 scala gt type Q HashMap Char Q
  • fgetc 无法识别 EOF [重复]

    这个问题在这里已经有答案了 下面的程序在各种 Solaris Linux 版本上运行良好 但在 AIX 上运行不佳 但是 如果我更换while c EOF with while c 0xff 在 AIX 上它运行得很好 有什么想法吗 我检查
  • 通用接口和实现 - 类型无法转换

    我有一个通用接口定义为 public interface ItemService
  • 检查 Perl 函数参数值得吗?

    有很多关于MooseX 方法 签名 http search cpan org perldoc MooseX Method Signatures甚至在此之前 诸如参数 验证 http search cpan org perldoc Param
  • 我应该如何在软件中实现通用 FMA/FMAF 指令?

    FMA是一个融合乘加指令 这fmaf float x float y float z 函数于glibc称为vfmadd213ss操作说明 我想知道这个指令是如何执行的 据我的理解 添加的指数x and y 尾数相乘x and y 将结果归一
  • MySQL 的 TEXT 类型的 Oracle 等效项

    Oracle 是否有与 MySQL 等效的列类型TEXT type 如果不是 那么通常如何存储较大的文本块 BLOB varchar 32767 如果重要的话 它是通过 PHP 访问 Oracle 10 历史背景是非常受欢迎的 Oracle
  • 将“C# 友好类型”名称转换为实际类型:“int” => typeof(int)

    我想得到一个System Type给定一个string指定 原始 类型C 友好名称 基本上与 C 编译器读取 C 源代码时的方式相同 我觉得描述我所追求的最好方式是单元测试的形式 我希望存在一种通用技术 可以使以下所有断言通过 而不是尝试对
  • TypeScript 是否可以从动态对象推断键?

    我在这里想要实现的是从数组生成的对象的智能感知 自动完成 类似于 Redux 的 Action Creator 一个字符串数组 string 可以简化为具有形状的对象 string string 例如 const a ONE TWO THR
  • 如何避免 numpy.random.choice 中的舍入错误?

    假设 x 1 x 2 x n 是 n 个对象 并且想要选择其中一个 以便选择 x i 的概率与某个数字 u i 成正比 Numpy 为此提供了一个函数 x u np array x 1 x 2 x n np array u 1 u n np
  • 在 WIN32 与 WIN64 中配置浮点单元上下文

    我正在尝试编写一个未处理的异常过滤器 请参阅 SetUnhandledExceptionFilter 以与 Windows SEH 一起使用来报告无效的浮点操作 我想捕获异常 打印堆栈跟踪 然后禁用浮点异常并使用生成的非有限或非数字值恢复执
  • 确定 C/C++ 中的浮点运算是否发生舍入

    我正在尝试提出一种有效的方法来确定 IEEE 754 操作何时将 确实发生舍入 不幸的是我无法简单地检查硬件标志 它必须在几个不同的平台上运行 我想到的方法之一就是以不同的舍入模式进行运算来比较结果 添加示例 double result o
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 快速滚动带有图像的表格单元格。是这样的吗?

    我尝试使用 Tweetie 的创建者 Loren Brichter 的创建一个快速滚动列表技术 http web archive org web 20100922230053 http blog atebits com 2008 12 fa
  • AWS EBS 卷“使用中 - 优化”

    我有一个 EBS 卷显示 使用中 优化 状态 这是什么意思 AWS正在执行哪些优化 它位于附加到 Windows Server 2012 R2 EC2 实例的 300GB 加密 gp2 卷上 The in use optimizing状态与
  • 将 NLP 转换为 SQL 有哪些方法? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近 我们开始研究对话式聊天机器人的想法 并一直在考虑将自然语言查询转换为 SQL 的不同方法 这些是
  • C#,输出多个值的方法

    我正在使用c 我有一个输出多个值的方法 我知道out但这是一个引用类型 是否有与值类型等效的东西 但也可以从方法输出多个值 对于引用类型 值也会在方法之外发生更改 因此我想防止这种情况发生 out 我知道out但这是一个引用类型 不清楚你的
  • Python格式大小应用(将B转换为KB、MB、GB、TB)

    我正在尝试编写一个应用程序来将字节转换为 kb 到 mb 到 gb 到 tb 这是我到目前为止所拥有的 def size format b if b lt 1000 return i b B elif 1000 lt b lt 100000
  • 在 Postgresql 中,如何使用“At Time Zone”取消反转时区偏移

    我正在尝试了解 Postgresql 时区 但我似乎无法弄清楚这一点 EST 是美国的 东部标准时间 通常是UTC 5 http en wikipedia org wiki Eastern Time Zone 示例 1 基础测试 selec
  • QML WebEngineView 轻弹内容

    我正在尝试使用 QML 和 WebEngineView 组件使用 Ubuntu 14 04 制作一个简单的桌面网络浏览器 该应用程序将在带有触摸板的设备上运行 因此最好使 WebEngineView 中显示的内容可滑动 我尝试这样做 但它不
  • 为什么“