gpt4 book ai didi

python - 在第一原则级别将 float 转换为 bool 值或从 bool 值转换时会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:18 25 4
gpt4 key购买 nike

我试图弄清楚在 python 中将 float 转换为 bool 值或从 bool 值转换时,幕后到底发生了什么。这是我可以在网上找到的信息,我想知道是否还有其他人愿意介入并帮助我获得正式的理解:

float 在 C 语言中表示为 64 位数据结构,称为 double 。

bool 值 在 C 中表示为 1 和 0。如果 -> 1(二进制形式 0001)如果 -> 0(二进制形式 0000)。

来自 this link here ,我可以看到内存中的 double 确实有 3 个部分。符号、指数和分数。

从第一原则开始,我倾向于认为指数和分数的某种组合被用来转换为浮点型 bool 值。例如 2^01e^x != 0 对于 e 的所有排列>x 分别,所以我真的很困惑。

我明天有一个面试,很可能会问我这个问题,所以我想知道我是否可以得到一些帮助来解决这个问题。谢谢,祝你白天/晚上愉快!

最佳答案

这似乎是来自https://github.com/python/cpython/blob/master/Objects/floatobject.c的相关代码.

static int
float_bool(PyFloatObject *v)
{
return v->ob_fval != 0.0;
}

如我们所见,值 v->ob_fval( double 值)与 0.0 进行了比较。如果它们比较不相等,则该函数返回一个非零值,Python 然后将其映射到 bool 值 True(或 1)。如果它们比较相等,则函数返回 0 (false),Python 将其映射到 bool 值 False (0)。

因此,如何表示 double 的问题在 Python 解释器级别上并不真正相关。表达式 v->ob_fval != 0.0 很可能映射到单个硬件比较指令。大多数处理器都有用于浮点运算的专用硬件。

与 0 比较有点棘手,因为 IEEE float 同时具有 +0 和 -0 表示(如您在提供的链接中所见),因此硬件需要检查 v->ob_fval 的情况为 -0,但与 +0 进行比较。但是硬件通常会处理这个问题,而 Python(甚至 C 编译器)通常不必担心那种程度的细节。

你对 2^0e^x 的困惑与原来的问题并不相关,但我认为你肯定很困惑,所以我建议再次阅读您的链接。关键是double中的指数不是小数部分的指数;它是常数值 2 的指数,分数(加 1)乘以结果。

关于python - 在第一原则级别将 float 转换为 bool 值或从 bool 值转换时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57600928/

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