浮点数有负数吗_浮点数和定点数

在我们日常的程序开发中,不只会用到整数。更多情况下,我们用到的都是实数。比如,我们开发一个电商 App,商品的价格常常会是 9 块 9;再比如,现在流行的深度学习算法,对应的机器学习里的模型里的各个权重也都是 1.23 这样的数。可以说,在实际的应用过程中,这些有零有整的实数,是和整数同样常用的数据类型,我们也需要考虑到。

浮点数的不精确性

那么,我们能不能用二进制表示所有的实数,然后在二进制下计算它的加减乘除呢?先不着急,我们从一个有意思的小案例来看。你可以在 Linux 下打开 Python 的命令行 Console,也可以在 Chrome 浏览器里面通过开发者工具,打开浏览器里的 Console,在里面输入“0.3 + 0.6”,然后看看你会得到一个什么样的结果。
>>> 0.3 + 0.60.8999999999999999
不知道你有没有大吃一惊,这么简单的一个加法,无论是在 Python 还是在 JavaScript 里面,算出来的结果居然不是准确的 0.9,而是 0.8999999999999999 这么个结果。这是为什么呢?在回答为什么之前,我们先来想一个更抽象的问题。通过前面的这么多讲,你应该知道我们现在用的计算机通常用 16/32 个比特(bit)来表示一个数。那我问你,我们用 32 个比特,能够表示所有实数吗?答案很显然是不能。32 个
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Verilog中,可以使用一些方法将有符号点数转换为定点数。下面是一种可能的实现方法: 1. 首先,确定定点数的整数部分和小数部分的位数。假设我们将使用16位的定点数,其中8位用于整数部分,8位用于小数部分。 2. 将点数乘以2的小数部分位数次方,以将其转换为整数部分和小数部分都是整数的形式。 3. 将点数转换为整数形式后,使用Verilog中的符号扩展操作来处理有符号数。如果点数是正数,则直接将其传递给定点数输出。如果点数负数,则需要对其进行补码操作。 4. 根据定点数的整数部分和小数部分位数,对其进行调整和截断。如果小数部分的位数大于定点数的小数部分位数,则进行四舍五入或者截断操作。 下面是一个简单的Verilog代码示例,演示了如何将一个8位有符号点数转换为16位定点数: ```verilog module float_to_fixed( input [7:0] float_num, output reg [15:0] fixed_num ); reg [7:0] integer_part; reg [7:0] decimal_part; always @(*) begin integer_part = float_num[7:0]; decimal_part = float_num[15:8]; end always @(integer_part, decimal_part) begin fixed_num = {integer_part, decimal_part}; end endmodule ``` 在这个例子中,输入信号 `float_num` 是一个8位有符号点数,输出信号 `fixed_num` 是一个16位定点数。点数的整数部分和小数部分分别通过 `integer_part` 和 `decimal_part` 寄存器来存储,然后将它们组合成定点数输出。 请注意,此示例仅仅是一个基本的转换示例,实际应用中可能需要更复杂的处理来满足具体的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值