表示范围

简介: 表示范围

大多数编程语言使用某些固定长度的比特位来表达数值。因此,数值的表示在范围精度上都是有限制的。


标准Lua 使用 64 个比特位来存储整型值,其最大值为263-1,约等于1019精简Lua 使用 32 个比特位存储整型值,其最大值约为 20亿 。数学库中的常量定义了整型值的最大值math.maxinteger )和最小值math.mininteger )。


64 位整型值中的最大值是一个很大的数值:全球财富总和(按美分计算)的数千倍和全球人口总数的数十亿倍。尽管这个数值很大,但是仍然有可能发生溢出。当我们在整型操作时出现比 mininteger 更小或者比 maxinteger 更大的数值时,结果就会回环


在数学领域,回环的意思是结果只在 minintegermaxinteger 之间,也就是对264取模的算数结果。在计算机领域,回环的意思是丢弃最高进位。假设最高进位存在,其将是 65 个比特位,代表264。因此,忽略第 65 个比特位不会改变值对264取模的结果。


Lua 语言中,这种行为对所有涉及整型值的算术运算都是一致且可预测的,如下所示:

> math.maxinteger + 1 == math.mininteger      --> true
> math.mininteger -1 == math.maxinteger       --> true
> -math.mininteger == math.mininteger         --> true
> math.mininteger // -1 == math.mininteger    --> true


最大可以表示的整数是 0x7ff...fff ,即除最高位(符号位,零为非负数值)外其余比特位均为 1 。当我们对 0x7ff...fff1 时,其结果变为 0x800...000 ,即最小可表示的整数。最小整数比最大整数的表示幅度大 1

> math.maxinteger     --> 9223372036854775807
> 0x7fffffffffffffff  --> 9223372036854775807
> math.mininteger     --> -9223372036854775808
> 0x8000000000000000  --> -9223372036854775808


对于浮点数而言,标准Lua使用双精度。标准Lua使用 64 个比特位表示所有数值,其中 11 位为指数。双精度浮点数可以表示具有大致 16 个有效十进制位的数,范围[-10308, 10308]。精简Lua使用 32 个比特位表示单精度浮点数,大致具有 7 个有效十进制位,范围[-1038, 1038]。


双精度浮点数对于大多数实际应用而言是足够大的,但是我们必须了解精度的限制。如果我们使用十位表示一个数,那么 1/7 会被取整到 0.142857142 。如果我们使用十位计算 1/7*7 ,结果会是 0.999999994 ,而不是 1 。此外,用十进制表示的有限小数在用二进制表示时可能是无限小数。例如, 12.7-20+7.3 即便是用双精度表示也不是 0 ,这时由于 12.77.3 的二进制表示不是有限小数。


由于整型值和浮点型值的表示范围不同,因此当超过他们的表示范围时,整型值和浮点型值的算数运算会产生不同的结果:

> math.maxinteger + 2       --> -9223372036854775807
> math.maxinteger + 2.0     --> 9.2233720368548e+18


在上例中,两个结果从数学的角度看都是错误的,而且他们的错误方式不同。第一行对最大可表示整数进行了整型求和,结果发生了回环。第二行对最大可表示整数进行了浮点型求和,结果被取整成了一个近似值,这可以通过如下的比较运算证明:

> math.maxinteger + 2.0 == math.maxinteger + 1.0      --> true


尽管每一种表示都有其优势,但是只有浮点型才能表示小数。浮点型的值可以表示很大范围,但是浮点型能够表示的整数范围被精确地限制在[-253, 253]之间。在这个范围内,我们基本可以忽略整型和浮点型的区别;超出这个范围后,我们则应该谨慎地思考所使用的表示方式。

目录
相关文章
|
存储 弹性计算 固态存储
科普 | 阿里云的“6 Pro”是什么?
最近,阿里云推出了一款第六代增强型云服务器ECS “6 Pro”,此为何方神圣?今天小白就带大家一探究竟
科普 | 阿里云的“6 Pro”是什么?
|
15天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171335 12
|
18天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150296 32
|
26天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201962 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
4天前
|
机器学习/深度学习 自然语言处理 PyTorch
深入剖析Transformer架构中的多头注意力机制
多头注意力机制(Multi-Head Attention)是Transformer模型中的核心组件,通过并行运行多个独立的注意力机制,捕捉输入序列中不同子空间的语义关联。每个“头”独立处理Query、Key和Value矩阵,经过缩放点积注意力运算后,所有头的输出被拼接并通过线性层融合,最终生成更全面的表示。多头注意力不仅增强了模型对复杂依赖关系的理解,还在自然语言处理任务如机器翻译和阅读理解中表现出色。通过多头自注意力机制,模型在同一序列内部进行多角度的注意力计算,进一步提升了表达能力和泛化性能。
|
8天前
|
存储 人工智能 安全
对话|无影如何助力企业构建办公安全防护体系
阿里云无影助力企业构建办公安全防护体系
1253 10
|
10天前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
|
9天前
|
人工智能 自然语言处理 程序员
通义灵码2.0全新升级,AI程序员全面开放使用
通义灵码2.0来了,成为全球首个同时上线JetBrains和VSCode的AI 程序员产品!立即下载更新最新插件使用。
1349 24