作为新生的,不用背负任何历史包袱的全新语言,仓颉充分吸收了过去数十年来众多编程语言之长,原生智能化、天生全场景、高性能、强安全。作为华为鸿蒙系统的平台语言,仓颉拥有良好的发展潜力和前景,极有可能成为第一款形成世界级影响的国产编程语言。青少年现在学习仓颉,就是在投资未来 !

版权声明

作者:重庆大学 陈波

本文可以在互联网上自由转载,但必须注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。本文不可以以纸质出版为目的进行改编、摘抄。

2.4 浮点数类型及其字面量

🚠 物见其然

  仓颉使用浮点数类型来存储非整的小数。三个原生的浮点数类型Float16、Float32、Float64依次使用16、32、64个比特的存储空间来存储浮点数。显然,浮点数对象占据的空间越大,其能容纳的浮点数的范围就越大,精度也越高。

  在下述示例中,我们分别使用Float16、Float32和Float64三种类型的变量存储了同一个浮点小数1400.1。其中,浮点数字面量1.4001e3使用了所谓“科学计数法”,其值为1.4001×103,亦为1400.1。

1
2
3
4
5
6
7
8
9
10
//Project - FloatLiterals
package FloatLiterals

main(): Int64 {
var a:Float16 = 1400.1
var b:Float32 = 1400.1
var c:Float64 = 1.4001e3 //1.4001E3等同
println("a = ${a}, b = ${b}, c = ${c}")
return 0
}

上述程序的执行结果为:

1
a = 1400.000000, b = 1400.099976, c = 1400.100000

  从执行结果看,浮点数1400.1存储到Float16类型的变量a里面,变成了1400.0,误差高达0.1。Float32类型的变量b的储值误差相对较小,Float64类型的变量c基本没有误差。

  Float32可以满足大多数工程和日常计算的精度要求。如果对计算精度和储值范围要求较高,可以选用Float64。由于储值精度很差,Float16仅在存储空间十分局促的场景下使用。

⛵ 知所以然

  一个Float32类型的浮点数对象由连续4个字节,共32个比特构成,从低到高依次为第0位至第31位。如图2-8所示,按照IEEE 754标准,一个Float32类型的浮点数对象的32个比特被分成了符号位(第31位,表示正负)、指数E(第23 ~ 30位)和有效数字M(第0 ~ 22位)三个部分。

image-20241130165308854

图2-8 32位浮点数存储结构

  Float32使用以2为底的科学计数法来表达一个浮点小数,其数学表达形式为:±M×2E 。当十进制小数1400.1以Float32类型存储时,会被转换成以2为底的科学计数表达形式并存放在有限的32比特空间内,误差在所难免。

海洋饼干叔叔的仓颉语言学习笔记将持续更新… 敬请期待。


欢迎支持海洋饼干叔叔系列程序设计教材,案例、配套资源丰富,实践性强,高等教育出版社出版。

高校教学同行如果需要样书,或者索取教学支持资源, 请联系公众号或者海洋饼干叔叔本人。

《Python编程基础及应用》 《Python编程基础及应用实验教程》 《C++编程基础及应用》
book1 实验书图片 Cpp小尺寸