gpt4 book ai didi

python - 二进制/十六进制浮点输入

转载 作者:太空狗 更新时间:2023-10-30 01:01:54 29 4
gpt4 key购买 nike

为什么只允许以 10 为基数使用小数点?为什么以下会引发语法错误?

0b1011101.1101

我输入的数字是否有歧义?除了 93.8125

之外,字符串似乎没有其他可能的数字

同样的问题也适用于其他基地:

0x5d.d

我可以用一个相当简单的函数来解决这个问题:

def base_float(number_string, base):
n = number_string.split('.')
number = int(n[0], base)
if len(n) > 1 and len(n[1]):
frac_part = float(int(n[1], base)) / base**len(n[1])
if number < 0:
frac_part = -frac_part
number += frac_part
return number

它给了我预期的表现形式:

>>> base_float('0b1011101.1101', 2)
93.8125

int 接受任意基数,但不接受小数点,float 接受小数点但不接受任意基数。为什么?

最佳答案

好吧,它们被称为小数 点;)

您可以使用一种科学*记数法

>>> 0b10111011101 * 0b10**-4
93.8125
>>> 0x5dd * 0x10**-1
93.8125
>>> 938125 * 10**-4 # note power is number of "decimal" places to shift
93.8125

* 是的,我意识到这不是真正的科学记数法

编辑

出于好奇,我使用 dis 模块反汇编了这些简单语句的字节码,看看它们是否是在运行时计算的

>>> import dis
>>> def f():
... return 0x5dd * 0x10**-1
...
>>> dis.dis(f)
2 0 LOAD_CONST 6 (93.8125)
3 RETURN_VALUE

因此看起来您在使用此方法时不应看到性能下降。

编辑2

...除非你使用 Python 2

>>> import dis
>>> def f():
... return 0x5dd * 0x10**-1
...
>>> dis.dis(f)
2 0 LOAD_CONST 1 (1501)
3 LOAD_CONST 4 (0.0625)
6 BINARY_MULTIPLY
7 RETURN_VALUE

关于python - 二进制/十六进制浮点输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398356/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com