Javascript 浮点:我可以递归地将数除以2,而永远不会得到舍入误差吗?

Javascript 浮点:我可以递归地将数除以2,而永远不会得到舍入误差吗?,javascript,sqlite,floating-point,precision,Javascript,Sqlite,Floating Point,Precision,二进制只能将这些数字表示为有限分数,分母是2的幂 这是否意味着通过此过程计算的数字可以相互相加或乘以2任意次数,并且仍然具有精确的二进制/浮点表示,且没有舍入错误 const dv2 = (num, limit) => { limit--; if (limit === 0) { return; } else { console.log(num, limit); dv2((num / 2), limit) } }

二进制只能将这些数字表示为有限分数,分母是2的幂

这是否意味着通过此过程计算的数字可以相互相加或乘以2任意次数,并且仍然具有精确的二进制/浮点表示,且没有舍入错误

const dv2 = (num, limit) => {
    limit--;
    if (limit === 0) {
        return;
    } else {
        console.log(num, limit);
        dv2((num / 2), limit)
    }
};

可以确定浮点数是精确的还是近似的吗?

可以,只要您使用的是二进制浮点数(例如非常常见的IEEE-754二进制浮点数),并且不会溢出到无穷大或下溢到低于正常值的数。在二进制浮点运算中,乘或除2是精确的,直到达到指数极限为止

对于32位IEEE-754二进制文件,有限的正常值高达2128−2104降到2−126(存在低至2的正低于正常值−149,但它们的有效位[分数部分]中的位比正常数字少,因此精度降低。)

对于64位IEEE-754二进制文件,有限的正常值高达21024−2971降到2−1022(存在低至2的正低于正常值−(1074)


在没有上下文的情况下,无法确定浮点数是精确表示还是仅近似于某个先前的数字。(有一种方法可以检测浮点运算何时对结果进行四舍五入。在编程语言的实现中,访问这些附加信息通常被忽略。)一旦一个数字转换为浮点数字,浮点数字就准确地表示它所表示的内容。它不包含有关以前发生的舍入误差量的信息。(如果您有关于前一个数字的其他信息,例如它来自一个有五个有效数字的十进制数字,那么您可以推断原始数字的情况。)

是的,只要您使用的是二进制浮点(例如非常常见的IEEE-754二进制浮点)不要溢出到无穷大或下溢到低于正常值的数字。在二进制浮点运算中,乘或除2是精确的,直到达到指数极限为止

对于32位IEEE-754二进制文件,有限的正常值高达2128−2104降到2−126(存在低至2的正低于正常值−149,但它们的有效位[分数部分]中的位比正常数字少,因此精度降低。)

对于64位IEEE-754二进制文件,有限的正常值高达21024−2971降到2−1022(存在低至2的正低于正常值−(1074)


在没有上下文的情况下,无法确定浮点数是精确表示还是仅近似于某个先前的数字。(有一种方法可以检测浮点运算何时对结果进行四舍五入。在编程语言的实现中,访问这些附加信息通常被忽略。)一旦一个数字转换为浮点数字,浮点数字就准确地表示它所表示的内容。它不包含有关以前发生的舍入误差量的信息。(如果您有关于前一个数字的其他信息,例如它来自一个有五个有效数字的十进制数字,那么您可以推断出原始数字的情况。)

您使用的是什么语言?分辨率有一个极限,在这个极限之后,你不能以7位数的精度变小(C#float大约为-3.4×1038 bis+3.4×1038)。javascript并将数字存储在sqlite中为real类型(float 8字节IEEE)。你使用的是什么语言?分辨率有一个限制,超过该限制后,您将无法以7位数的精度缩小(C#float大约-3.4×1038 bis+3.4×1038)。javascript并将数字存储在sqlite中为real类型(float 8 byte IEEE)“可以确定浮点数何时精确”-->javascript是否可以像不精确一样访问FP标志?@chux:我怀疑。ECMA-262标准中没有出现“不精确”,也没有出现“下溢”,如果支持IEEE-754浮点标志,我希望至少出现一次。但我对答案进行了编辑,以提及这种可能性。“可以确定浮点数何时是精确的”-->javascript是否可以访问不精确的FP标志?@chux:我对此表示怀疑。ECMA-262标准中没有出现“不精确”,也没有出现“下溢”,如果支持IEEE-754浮点标志,我希望至少出现一次。但我编辑了答案,提到了可能性。