16bit半精度浮点加乘法(用于结果验证)-图形测试小程序(python)

发布时间:2024年01月18日

在这里插入图片描述
测试:
在这里插入图片描述
代码如下:

import tkinter as tk
import struct
from tkinter import Entry, Button, Label

def float_to_binary_16(value):
    # 将浮点数转换为16位二进制表示
    binary_representation = struct.pack('!e', value)
    binary_string = ''.join(f'{byte:08b}' for byte in binary_representation)
    return binary_string[:16]

def binary_to_float_16(binary_string):
    # 将16位二进制表示转换为浮点数
    if len(binary_string) != 16:
        raise ValueError("Binary string must be 16 bits long")

    byte_values = [int(binary_string[i:i + 8], 2) for i in range(0, 16, 8)]
    binary_representation = struct.pack('!BB', *byte_values)
    float_value = struct.unpack('!e', binary_representation)[0]
    return float_value

def float16_addition(bin_str_a, bin_str_b):
    # 将二进制字符串转换为浮点数
    float_a = binary_to_float_16(bin_str_a)
    float_b = binary_to_float_16(bin_str_b)

    # 执行浮点加法
    result = float_a + float_b

    # 将结果转换为16位二进制字符串
    result_bin_str = float_to_binary_16(result)

    return result_bin_str

def float16_multiplication(bin_str_a, bin_str_b):
    # 将二进制字符串转换为浮点数
    float_a = binary_to_float_16(bin_str_a)
    float_b = binary_to_float_16(bin_str_b)

    # 执行浮点乘法
    result = float_a * float_b

    # 将结果转换为16位二进制字符串
    result_bin_str = float_to_binary_16(result)

    return result_bin_str

def calculate():
    original_a = float(entry_a.get())
    original_b = float(entry_b.get())

    binary_a = float_to_binary_16(original_a)
    binary_b = float_to_binary_16(original_b)

    # 浮点加法
    addition_result = float16_addition(binary_a, binary_b)
    add_result = binary_to_float_16(addition_result)
    label_add_result.config(text=f"Add: {add_result, addition_result}")

    # 浮点乘法
    multiplication_result = float16_multiplication(binary_a, binary_b)
    mul_result = binary_to_float_16(multiplication_result)
    label_mul_result.config(text=f"Mul: {mul_result, multiplication_result}")

# 创建Tkinter窗口
window = tk.Tk()
window.title("16位浮点数运算")

# 创建输入框和标签
label_a = Label(window, text="输入A:")
entry_a = Entry(window)
label_b = Label(window, text="输入B:")
entry_b = Entry(window)

# 创建按钮
calculate_button = Button(window, text="计算", command=calculate)

# 创建结果标签
label_add_result = Label(window, text="Add: ")
label_mul_result = Label(window, text="Mul: ")

# 布局界面
label_a.grid(row=0, column=0)
entry_a.grid(row=0, column=1)
label_b.grid(row=1, column=0)
entry_b.grid(row=1, column=1)
calculate_button.grid(row=2, column=0, columnspan=2)
label_add_result.grid(row=3, column=0, columnspan=2)
label_mul_result.grid(row=4, column=0, columnspan=2)

# 运行Tkinter主循环
window.mainloop()

文章来源:https://blog.csdn.net/a284365/article/details/135669187
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。