gpt4 book ai didi

c# - 分解 float

转载 作者:太空狗 更新时间:2023-10-29 15:19:58 29 4
gpt4 key购买 nike

给定一个 float ,我想将它分成几个部分的总和,每个部分都有给定的位数。例如,给定 3.1415926535 并要求将其分成以 10 为基数的部分,每部分 4 位数字,它将返回 3.141 + 5.926E-4 + 5.350E-8。实际上,我想将一个 double (具有 52 位精度)分成三个部分,每个部分具有 18 位精度,但是用 base-10 示例更容易解释。我不一定反对使用标准 double IEEE float 的内部表示的技巧,但我真的更喜欢一个纯粹停留在浮点领域的解决方案,以避免任何字节序依赖或非标准问题浮点表示。

不,这不是作业问题,而且,是的,这有实际用途。如果你想确保浮点乘法是精确的,你需要确保你相乘的任何两个数字永远不会超过你在浮点类型中有空间的数字的一半。从这种分解开始,然后将所有部分相乘并进行卷积,是一种方法。是的,我也可以使用任意精度的浮点库,但是当只涉及几个部分时,这种方法可能会更快,而且它肯定会更轻量级。

最佳答案

If you want to ensure that floating point multiplications are exact, you need to make sure that any two numbers you multiply will never have more than half the digits that you have space for in your floating point type.

没错。这种技术可以在 Veltkamp/Dekker 乘法中找到。虽然可以像其他答案一样访问表示的位,但您也可以仅使用浮点运算。 this blog post 中有一个实例.您感兴趣的部分是:

Input: f; coef is 1 + 2^N
p = f * coef;
q = f - p;
h = p + q; // h contains the 53-N highest bits of f
l = f - h; // l contains the N lowest bits of f

*-+ 必须是精度为 f 的 IEEE 754 操作这个工作。在 Intel 架构上,这些操作由 SSE2 指令集提供。 Visual C 在其编译的 C 程序的前奏中将历史 FPU 的精度设置为 53 位,这也有帮助。

关于c# - 分解 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18458413/

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