当前位置: 首页 > news >正文

「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解

本篇将详细介绍 Cangjie 中的浮点类型,包括浮点数的表示方法、精度、舍入与溢出处理、科学计数法表示、字面量的进制表示、常用运算、类型转换及应用场景,帮助开发者掌握浮点数的使用方法。


关键词
  • 浮点类型表示
  • 精度与舍入
  • 溢出与下溢
  • 科学计数法
  • 类型转换
  • 字面量表示

一、浮点类型概述

在 Cangjie 中,浮点类型用于表示包含小数部分的数值,主要包括两种类型:

  • 单精度浮点数Float32):约 6-7 位有效数字,适用于内存占用较低的场景。
  • 双精度浮点数Float64):约 15-16 位有效数字,适用于对精度要求较高的场景。

建议:若没有特殊的内存限制,优先使用 Float64 以获得更高精度。


二、浮点数的表示范围与精度

浮点数的表示范围取决于其位数限制:

  1. 单精度浮点数Float32):范围约为 ±3.4 × 10^38。
  2. 双精度浮点数Float64):范围约为 ±1.8 × 10^308。

由于浮点数使用二进制存储,在高精度运算中可能会出现舍入误差。


三、浮点类型字面量的表示

Cangjie 中的浮点类型字面量支持两种进制表示方式:十进制十六进制

  • 十进制表示:字面量至少需要包含整数或小数部分。当没有小数部分时,必须包含指数部分(以 eE 为前缀,底数为 10)。

  • 十六进制表示:字面量以 0x0X 为前缀,指数部分以 pP 表示(底数为 2),同样至少需要包含整数或小数部分。

示例

let a: Float32 = 3.14       // 十进制
let b: Float32 = 2e3        // 科学计数法
let c: Float32 = 0x1.1p0    // 十六进制
let d: Float64 = 0x.2p4     // 十六进制

四、浮点数的科学计数法表示

在 Cangjie 中,浮点数可以通过科学计数法表示,适合表示较大或较小的数值。使用 eE 表示指数部分,例如:1.23e4 表示 1.23 × 10^4

示例

let bigNum = 3.45e6      // 表示 3450000
let smallNum = 2.67e-4   // 表示 0.000267println("大数: ${bigNum}, 小数: ${smallNum}")

输出:

大数: 3450000.000000, 小数: 0.000267

五、浮点数的运算

浮点数支持基础的算术运算和数学函数(如平方根、绝对值等),但需注意运算过程中可能出现精度损失。

5.1 算术运算

浮点数的加、减、乘、除操作如下:

let a: Float64 = 10.5
let b: Float64 = 3.2let sum = a + b        
let difference = a - b  
let product = a * b     
let quotient = a / b    println("加法: ${sum}, 减法: ${difference}, 乘法: ${product}, 除法: ${quotient}")

输出:

加法: 13.700000, 减法: 7.300000, 乘法: 33.600000, 除法: 3.281250

六、浮点数的溢出与下溢
  • 溢出:当浮点数超过最大表示范围时,Cangjie 会返回 inf
  • 下溢:当浮点数低于最小表示范围时,Cangjie 会返回 0.000000
let overflow = 1e309    // 超出 Float64 范围
let underflow = 1e-324  // 小于 Float64 范围println("溢出: ${overflow}, 下溢: ${underflow}")

输出:

溢出: inf, 下溢: 0.000000

七、浮点类型的后缀表示

为明确浮点字面量的类型,可在字面量后添加特定后缀:

后缀类型
f16Float16
f32Float32
f64Float64

示例

let a = 3.14f32   // a 的类型为 Float32
let b = 2e3f32    // b 的类型为 Float32
let c = 2.4e-1f64 // c 的类型为 Float64
let d = .123e2f64 // d 的类型为 Float64

八、浮点数的类型转换

浮点数与整数之间可以相互转换,但浮点转整数时会截断小数部分。

let floatNum: Float64 = 10.99
let intNum: Int32 = Int32(floatNum)  // 转换后小数部分被截断println("浮点数: ${floatNum}, 转换后的整数: ${intNum}")

输出:

浮点数: 10.990000, 转换后的整数: 10

九、浮点数的应用场景

浮点数适用于科学计算、货币金额表示等场景。

9.1 科学计算
let radius = 5.5
let area = 3.14159 * radius * radiusprintln("圆的面积: ${area}")

输出:

圆的面积: 95.033097
9.2 精确计算

在价格计算中,可使用浮点数表示更精确的金额:

let pricePerItem: Float64 = 19.99
let quantity: Float64 = 3.0
let totalPrice = pricePerItem * quantityprintln("总价: ${totalPrice}")

输出:

总价: 59.970000

十、浮点类型支持的操作符

浮点类型支持以下操作符:

  • 算术操作符:如 +-*/ 等。
  • 关系操作符:如 <>== 等。
  • 赋值操作符:如 =
  • 复合赋值操作符:如 +=-=

注意:浮点类型不支持自增(++)和自减()操作符。


小结

本篇详细讲解了 Cangjie 浮点类型的表示范围、科学计数法表示、字面量的进制表示、基本运算、舍入控制及应用场景,帮助开发者熟练运用浮点数处理涉及小数的计算任务。


下篇预告

下一篇将解析 Cangjie 的 布尔类型,探讨布尔运算及其在条件判断中的应用,敬请关注 「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解


上一篇:「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
下一篇:「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=206
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


相关文章:

「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解

本篇将详细介绍 Cangjie 中的浮点类型&#xff0c;包括浮点数的表示方法、精度、舍入与溢出处理、科学计数法表示、字面量的进制表示、常用运算、类型转换及应用场景&#xff0c;帮助开发者掌握浮点数的使用方法。 关键词 浮点类型表示精度与舍入溢出与下溢科学计数法类型转换…...

【UGUI】Unity 背包系统实现02:道具信息提示与显示

在游戏开发中&#xff0c;背包系统是一个常见的功能模块&#xff0c;用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统&#xff0c;包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系…...

掌握移动端性能测试利器:深入JMeter手机录制功能

引言 在当今移动互联网时代&#xff0c;应用程序的性能和用户体验至关重要。为了确保应用程序在不同设备和网络环境下都能稳定运行&#xff0c;性能测试成为了不可或缺的一环。Apache JMeter作为一款强大的开源性能测试工具&#xff0c;不仅支持传统的PC端性能测试&#xff0c…...

springboot010大学生入学审核系统的设计与实现(源码+包运行+LW+技术指导)

项目描述 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本站是一个B/S模式系统&#xff0c;采用Spring Boot框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c…...

Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行

一、前言说明 在地图应用中&#xff0c;有很多时候是需要断网环境中离线使用的&#xff0c;一般会采用两种做法&#xff0c;一种是只下载好离线瓦片地图&#xff0c;然后根据不同的缩放和经纬度坐标绘制瓦片。这种方式优点是任何地图都支持&#xff0c;只需要拿到瓦片即可&…...

从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发

从繁琐到优雅&#xff1a;用 PyTorch Lightning 简化深度学习项目开发 在深度学习开发中&#xff0c;尤其是使用 PyTorch 时&#xff0c;我们常常需要编写大量样板代码来管理训练循环、验证流程和模型保存等任务。PyTorch Lightning 作为 PyTorch 的高级封装库&#xff0c;帮助…...

UE5 第一人称射击项目学习(完结)

这个项目几乎完结了。 也算我上手的第一个纯蓝图小项目。 现在只剩下缝缝补补了。 之前把子弹设计为蓝图&#xff0c;这里要引入C的面向对象思想&#xff0c;建立成员函数。 首先双击打开子弹的蓝图 这边就可以构造成员函数 写一个print your name 在这里生成成员函数后&am…...

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…...

【vim】使用 gn 组合命令实现搜索选中功能

gn是Vim 7.4新增的一个操作&#xff08;motion&#xff09;&#xff0c;作用是跳到并选中下一个搜索匹配项。 具体说&#xff0c;Vim里执行搜索后&#xff0c;执行n操作只会跳转到下一个匹配项&#xff0c;而不选中它。但是我们往往需要对匹配项执行一些修改操作&#xff0c;例…...

【Python刷题】广度优先搜索相关问题

题目描述 小A与小B 算法思路 小A一次移动一步&#xff0c;但有八个方向&#xff0c;小B一次移动两步&#xff0c;只有四个方向&#xff0c;要求小A和小B最早的相遇时间。用两个队列分别记录下小A和小B每一步可以走到的位置&#xff0c;通过一个简单的bfs就能找到这些位置并…...

竞赛思享会 | 2024年第十届数维杯国际数学建模挑战赛D题【代码+演示】

Hello&#xff0c;这里是Easy数模&#xff01;以下idea仅供参考&#xff0c;无偿分享&#xff01; 题目背景 本题旨在通过对中国特定城市的房产、人口、经济、服务设施等数据进行分析&#xff0c;评估其在应对人口老龄化、负增长趋势和极端气候事件中的韧性与可持续发展能力。…...

早期超大规模语言模型的尝试——BLOOM模型论文解读,附使用MindSpore和MindNLP的模型和实验复现

背景 预训练语言模型已经成为了现代自然语言处理pipeline中的基石&#xff0c;因为其在少量的标注数据上产生更好的结果。随着ELMo、ULMFiT、GPT和BERT的开发&#xff0c;使用预训练模型在下游任务上微调的范式被广泛使用。随后发现预训练语言模型在没有任何额外训练的情况下任…...

二分查找题目:有序数组中的单一元素

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;有序数组中的单一元素 出处&#xff1a;540. 有序数组中的单一元素 难度 4 级 题目描述 要求 给定一个仅由整数…...

springboot基于Android的华蓥山旅游导航系统

摘 要 华蓥山旅游导航系统是一款专为华蓥山景区设计的智能导览应用&#xff0c;旨在为用户提供便捷的旅游信息服务。该系统通过整合华蓥山的地理信息、景点介绍、交通状况等数据&#xff0c;实现了对景区的全面覆盖。用户可以通过该系统获取实时的旅游资讯、交流论坛、地图等。…...

面向对象编程(OOP)深度解析:思想、原则与应用

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 面向对象编程&#xff08;OOP&#xff09;深度解析&#xff1a;思想、原则与应用 一、面向对象编程的基本…...

iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录

我们姑且将这款iPhone 17序列的超薄SKU称为“iPhone 17 Air”&#xff0c;Jeff Pu在报告中提到&#xff0c;我同意最近关于 iPhone 17超薄机型采用6 毫米厚度超薄设计的传言。 如果这一测量结果被证明是准确的&#xff0c;那么将有几个值得注意的方面。 首先&#xff0c;iPhone…...

「OpenCV交叉编译」ubuntu to arm64

Ubuntu x86_64 交叉编译OpenCV 为 arm64OpenCV4.5.5、cmake version 3.16.3交叉编译器 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 可在arm或linaro官网下载所需版本&#xff0c;本文的交叉编译器可点击链接跳转下载 Downloads | GNU-A Downloads – Arm Developer L…...

Stable Diffusion的解读(二)

Stable Diffusion的解读&#xff08;二&#xff09; 文章目录 Stable Diffusion的解读&#xff08;二&#xff09;摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…...

amd显卡和nVidia显卡哪个好 amd和英伟达的区别介绍

AMD和英伟达是目前市场上最主要的两大显卡品牌&#xff0c;它们各有自己的特点和优势&#xff0c;也有不同的适用场景和用户群体。那么&#xff0c;AMD显卡和英伟达显卡到底哪个好&#xff1f;它们之间有什么区别&#xff1f;我们又该如何选择呢&#xff1f;本文将从以下几个方…...

软件测试—— Selenium 常用函数(一)

前一篇文章&#xff1a;软件测试 —— 自动化基础-CSDN博客 目录 前言 一、窗口 1.屏幕截图 2.切换窗口 3.窗口设置大小 4.关闭窗口 二、等待 1.等待意义 2.强制等待 3.隐式等待 4.显式等待 总结 前言 在前一篇文章中&#xff0c;我们介绍了自动化的一些基础知识&a…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...