浮点数相加实例

文章状态:

  • 修复中
  • 待改善,但能用 (feat: 需要增加一个更全面的例子)
  • 已修复

规定浮点数的符号位为1位,指数位为3位,尾数位为5位,现有两个浮点数:1.2513.5

  • 1.25浮点数表示为二进制格式:0 011 01000
  • 13.5浮点数表示为二进制格式:0 110 10110

小小验算一下:

  • 0 011 01000 表示一个正数,指数位为3(移码 bisas=3),故实际exp=0,1.01000B * 20 = 1.01000B = 1.25
  • 0 110 10110 表示一个正数,指数位为6,减去偏置得到实际exp=3,1.10110B * 23 = 1101.10B = 13.5

现在要计算1.25+13.5,可按以下步骤计算:

一. 对阶

首先,指数位要相同才可进行尾数位的相加。指数位的相同可通过Δ来调节,其中Δ=|exp-exp|。1.25和13.5的Δ为|110B-011B| = |6-3| = 3,将1.01000 * 20 表示为 0.00101 * 23

为什么不是把13.5 的阶码110 变为011?如果由110 变为011,则13.5 的尾数部分就需要左移,而左移的对象几乎包含所有高位,相较于右移包含低位,对浮点运算的影响更大。

二. 尾数加减运算

现在1.25尾数表示为00101
       13.5尾数表示为10110

尾数运算:
在这里插入图片描述
相加后得到的真实结果就是:1.11011 * 23 = 1110.11B = 14.75 D,这和手算的结果是一致的。

三. 运算结果规格化

所谓规格化就是在尾数相加完毕之后,有可能无法满足1.M的表示方式(比如尾数产生进位,那么隐式小数点前面的数就变成了10),规格化就是将计算之后的数重新转化为1.M的正确表示方式。

由于现在得到的浮点结果就是规范数,所以此步不需要进行规范化。

四. 舍入处理

一般计算机采用先偶数舍入(也称向最接近的值舍入),本例运算的所有结果可以在9 位bit 范围内表示,因此无需考虑舍入处理。

五. 溢出判断

这次运算并阶码exp 没有发生溢出,因此这一步也是不需要进行任何操作的。

因此,最终得到的结果,表示为:0 110 11011


参考文献:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,以下是使用Java编写程序实现你的要求: ```java import java.util.Scanner; public class AddNums { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个字符串:"); String str1 = scanner.nextLine(); System.out.print("请输入第二个字符串:"); String str2 = scanner.nextLine(); AddNums addNums = new AddNums(); try { double num1 = Double.parseDouble(str1); double num2 = Double.parseDouble(str2); System.out.println("数值型数据相加的结果为:" + addNums.go(num1, num2)); } catch (NumberFormatException e) { System.out.println("连接两个字符串的结果为:" + addNums.go(str1, str2)); } } public String go(String str1, String str2) { return str1 + str2; } public double go(double num1, double num2) { return num1 + num2; } } ``` 程序首先使用 `java.util.Scanner` 类从键盘读取用户输入的两个字符串 `str1` 和 `str2`。然后,程序创建一个 `AddNums` 类的实例 `addNums`,并在 `try-catch` 块中对字符串进行转换以判断其是否为数值型数据。如果字符串是数值型数据,则调用参数类型为 `double` 的 `go()` 方法进行相加;如果字符串包含其他字符,则调用参数类型为 `String` 的 `go()` 方法进行连接。在 `catch` 块中捕获 `NumberFormatException` 异常,表示输入的字符串不是合法的数值型数据。 最后,程序输出连接两个字符串或数值型数据相加的结果。程序的输出结果可能如下: ``` 请输入第一个字符串:123 请输入第二个字符串:45.6 数值型数据相加的结果为:168.6 ``` ``` 请输入第一个字符串:Hello 请输入第二个字符串:world! 连接两个字符串的结果为:Helloworld! ``` 希望这个程序能够帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值