分数在计算机中是如何表示的?

2023-11-27

由于计算机以“1”和“0”来思考,它们如何计算和表示诸如 7.50 之类的分数?我了解 Java 和 JavaScript,如果需要答案,您可以使用它们作为示例。

Edit: 我正在看这个麻省理工学院 Cormen 教授关于哈希的视频在 46:31 秒,他使用模块化轮解释了乘法哈希函数,模块化轮是一个单位圆,其中有几个点,这些点表示分数。这促使我在 SO 中提出这个基本问题。


The most common way to represent numbers other than integers on computers is by using floating point, particularly IEEE 754 floating point. As you may be familiar with, integers are commonly represented by using hardware bits to represent binary numerals, so physical properties (such as charge or lack of charge, high voltage or low voltage, a magnetic field in one direction or another) are used to represent bits (0 and 1), and a sequence of those bits makes a numeral (such as 11010), which we interpret in binary to represent a number (110102 is 16+8+2 = 26). We do not usually think of it, but there is a “radix point” to the right of this numeral: “11010.” We only need the radix point when we have more bits to the right of it, which represent fractions. For example, 11010.112 is 16 + 8 + 2 + 1/2 + 1/4 = 26.75. To change from integers to floating point, we make the radix point float. In addition to the bits representing the numeral, we have some additional bits that tell us where to put the radix point.

因此,我们可能有三位(例如 010)来表示小数点的位置,而其他位(例如 1101011)则表示该值。小数点位 010 可能表示将小数点向左移动两个位置,更改为“1101011”。至“11010.11”。

在单精度 IEEE 754 中,有 1 个符号位(告诉我们 + 或 -)、8 个指数位和 23 个值位(用于“有效数字”或“小数”)。指数位的值 0 和 255 是特殊的。对于指数位的其他值,我们减去 127 以获得范围从 -126(小数点左移 126 位)到 127(小数点右移 127 位)的指数。有效数位被解释为二进制数字,只不过我们稍微修改了一下:我们写“1”,然后是小数点,然后是有效数的 23 位,所以我们有类似“1.1101011000…”的东西。作为替代方案,您可以将其视为一个整数:“1”然后是 23 位,没有插入小数点,形成 24 位二进制数字,但指数会额外调整 23(因此减去 150 而不是 127) 。

在双精度 IEEE 754 中,有 1 个符号位、11 个指数位和 52 个有效位。

还有其他不太常见的浮点格式。一些较旧的使用十六进制作为基数(使用指数来指示四位而不是一位的移位)。浮点格式的一种重要类型是十进制,其中指数表示 10 的幂。在十进制浮点中,有效数可以是二进制整数,也可以是二进制编码的十进制数(其中每四位表示一个十进制数字) )或者它可以是混合的(根据定制方案使用位组来指示少量十进制数字)。

浮点数的一个重要属性是它们不能表示所有实数(当然,即使是在有限范围内),甚至不能表示所有有理数。这迫使数学运算返回四舍五入为可表示数字的结果,这对于不熟悉浮点运算的人来说会带来无穷无尽的问题。此属性反过来又成为十进制浮点的一个功能:它非常适合处理货币面额和通常以十进制操作的其他与人类相关的数字,因为大多数舍入错误可以通过仔细使用十进制浮点来消除。科学家和数学家更多地使用与自然相关的数字或纯数字,而不是人类污染的数字,他们往往更喜欢二进制浮点,因为它更广泛可用并且得到硬件的良好支持。

There are other ways to represent non-integer numbers in computers. Another common method is fixed point. In fixed point, a sequence of bits, such as 1101011, is interpreted with a radix point at a known, fixed position. The position would be fixed at a position useful for a specific application. So the bits 1101011 could stand for the number 11010.112. An advantage of fixed point is that it is easily implemented with standard hardware. To add two fixed-point numbers, we simply add them as if they were integers. To multiply two fixed-point numbers, we multiply them as if they were integers, but the result has twice as many positions after the radix point, so we either shift the bits to adjust for this or we write our code so that the results of such operations are interpreted with the known number of bits after the radix point. Some processors have instructions to support fixed point by adjusting multiplications for this effect.

数字也可以缩放为整数。例如,要使用美国货币,我们只需将美元金额乘以 100 并使用整数进行所有算术运算。小数点仅在显示最终结果时插入(并在读取人类数据时进行解释)。另一种常见的缩放方法是通过乘以 255 来表示像素强度(从 0 到 1),以便从 0 到 1 的分数适合一个八位字节。

还有一些软件可以提供扩展精度(使用基本算术类型的多个单位来提供附加精度)或任意精度(使用动态数量的单位来提供所需的精度)。与硬件支持的算术相比,此类软件非常慢,并且通常仅用于特殊目的。此外,扩展精度与浮点本质上具有相同的属性;只是舍入误差变小了,而不是消失了。任意精度也有同样的缺陷,只不过它的动态精度可以让你把误差做得足够小,这样你就可以获得在必要区间内的最终结果(可能有证据证明你已经这样做了)。

表示非整数的另一种方法是使用分数。您可以存储分子和分母,并以与学校教授的方式大致相同的方式执行算术:通过乘以分子和乘以分母来进行乘法。通过将两个分数转换为具有公分母来进行加法,然后添加分子。这种算术是有问题的,因为分母很快就会变大,因此您需要扩展精度或任意精度来管理它们。

您还可以用符号或复合表达式来表示数字。例如,您可以使用表示应用于数字 2 的平方根运算的数据结构来存储它,而不是将二的平方根存储为数值。使用此类表示执行除最简单的运算以外的任何运算都需要非常复杂的软件来存储管理表达式、组合表达式、求约简等等。这种表示法用于专门的数学软件,例如 Maple 和 Mathematica。

最后,您可以以任何您想要的方式表示数字。我们的现代处理器是通用计算设备,达到了速度和存储容量的极限,因此您可以编写用字符串或数据结构或任何其他技术表示数字的算法。

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

分数在计算机中是如何表示的? 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • Java 收集返回顶级项目的映射的嵌套流

    我有以下模型 class Item String name List
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 无法捕获 Spring Batch 的 ItemWriter 中的异常

    我正在编写一个 Spring Batch 流程来将数据集从一个系统迁移到另一个系统 在这种情况下 这就像使用RowMapper实现在传递给查询之前从查询构建对象ItemWriter The ItemWriter称为save我的 DAO 上的
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 调用serve_forever() 时打印语句不起作用? [复制]

    这个问题在这里已经有答案了 我有以下小 python 脚本来运行本地服务器来测试一些 html print opened from http server import HTTPServer SimpleHTTPRequestHandler
  • 如何在 App Engine 上实现服务器亲和性或粘性会话?

    我的申请希望有 自动扩展 我希望 App Engine 在流量增加时启动应用程序的新实例 当实例空闲时 我希望 App Engine 将其关闭 客户端 服务器关联性 在初始客户端 gt 服务器 HTTP 请求之后 我想要客户端 能够连接到同
  • iPhone 上的单元测试如何进行?

    我是否需要为此使用特殊的库 或者我可以创建一个巨大的类来尝试实例化项目的每个对象并测试其中的所有方法吗 理论上是如何实现的 谷歌搜索 iPhone 单元测试 给出这个优秀的链接作为第一击 综上所述 Google Toolbox 为 iPho
  • Django 模板:为页面使用不同的 css

    刚接触 Django 我想对不同的页面使用不同的 css 文件 即 page1 css 用于 page1 html page2 css 用于 page2 html 有没有办法在扩展 base html 的同时做到这一点 在base html
  • 计算字符串中特定字符的数量

    抱歉 由于我的问题 我刚刚发现了一个新问题 获取字符串中特定字符串的数量 我一直在努力 如何找到字符串中特定字符的数量 案子是这样的 function get num chars char string 120201M 121212M 1
  • 使用 DAO 和 Web 服务的数据库插入方法的 Junit 测试用例

    我正在实施一个基于网络服务的大学管理系统 该系统将某些课程添加到数据库中 下面是我正在使用的代码 课程 java public class Course private String courseName private String lo
  • 如何在 Json.NET Silverlight 中使用 TypeNameHandling.Objects 进行反序列化?

    尝试在 Silverlight 中反序列化时出现异常 Test1 失败 而 Test2 成功 我还尝试过 TypeNameAssemblyFormat 到 Simple 和 Full 但得到相同的结果 Test2可以解析程序集 为什么Jso
  • 采用函数式语言的 Kernighan & Ritchie 字数统计示例程序

    我最近在网上阅读了一些有关函数式编程的内容 我想我对其背后的概念有了基本的了解 我很好奇涉及某种状态的日常编程问题是如何用纯函数式编程语言解决的 例如 C 编程语言 一书中的字数统计程序如何用纯函数语言实现 只要解决方案是纯函数式的 我们欢
  • 如何迭代通配符泛型?

    如何迭代通配符泛型 基本上我想内联以下方法 private
  • 浏览器引擎是否会压缩大型重复对象数组中的键名?

    本着这两个问题的精神 是否值得努力尝试减小 JSON 大小 JSON 响应对象 漂亮 的键和较大的响应 还是短的键和较小的响应 浏览器如何处理相同对象类型的大型数组 它们的键名是否以某种方式压缩在内存中 我曾经使用过一个图形库 并通过缩短对
  • 优化第七代英特尔酷睿视频 RAM 中的递增 ASCII 十进制计数器

    我正在尝试针对特定的 Kaby Lake CPU i5 7300HQ 优化以下子例程 理想情况下使代码比其原始形式至少快 10 倍 该代码在 16 位实模式下作为软盘式引导加载程序运行 它在屏幕上显示一个十位十进制计数器 计数 0 9999
  • 如何使用 python 捕获 mp3 流

    使用 python 捕获来自 http 的 mp3 流并将其保存到磁盘的最佳方法是什么 到目前为止我已经尝试过 target open target path w conn urllib urlopen stream url while T
  • 我们可以在Android编程中使用Optional吗?

    我一直在阅读有关 Java 8 中的可选类型的信息 我想在我的一些 Android 代码中实现 但是最新版本 Android 5 1 和 6 的 Dalvik 机器是否实现了 Java 8 中的所有功能 我仍在运行 Java 7 并在计算机
  • 如何读取文本框中的最后一行?

    我有一个不断更新的多行文本框 我只需要阅读文本框中的最后一个单词 句子 string lastLine textBox1 ReadLine Last 尝试这个 if textBox1 Lines Any string lastLine te
  • 通过 WebView2 将对象从 .NET 设置为 JavaScript 代码

    提前致谢 我想为网页中包含的java脚本代码设置一个对象 我正在 WPF 窗口中显示此网页 该窗口引用名称为 webView 的 WebView2 我对 WebView2 还很陌生 我不太确定如何在 WebView2 SDK 的 AddHo
  • 使用 NSFetchedResultsController 反映父对象中关系中对象的更改

    我有两个实体事件和时间 事件实体与时间实体具有一对多关系 因为每个事件可以执行多次 现在我想在 tableView 中按时间顺序显示所有事件 因此 我设置了一个 fetchedResultsController 来获取所有时间对象 根据开始
  • jquery同步函数

    有没有办法在另一个函数完成后运行一个函数 例如 doSomething doSomethingElse 我只希望 doSomethingElse 在 doSomething 完成后运行 这可能吗 If your doSomething 函数
  • C# 中机器人框架的输入指示器

    我在 Bot 框架中有一个机器人 一旦用户响应机器人并且机器人正在处理它 我想同时向用户显示打字指示器 在 Nodejs 中这是可能的 https learn microsoft com en us bot framework nodejs
  • Kotlin 协程中的“+”?

    这是示例代码通过显式作业取消对于 Kotlin 协程 fun main args Array
  • 分数在计算机中是如何表示的?

    由于计算机以 1 和 0 来思考 它们如何计算和表示诸如 7 50 之类的分数 我了解 Java 和 JavaScript 如果需要答案 您可以使用它们作为示例 Edit 我正在看这个麻省理工学院 Cormen 教授关于哈希的视频在 46