Math 平方根为2的X位小数需要多少位二进制数

Math 平方根为2的X位小数需要多少位二进制数,math,square-root,Math,Square Root,我一直在玩弄计算2的平方根之类的东西。很容易想出一个算法来产生n个正确的二进制数字。我想要帮助的是确定我需要多少二进制数字才能得到m个正确的十进制数字?m个二进制数字将得到m个十进制数字,但m个十进制数字可能还不完全正确 编辑: 我已经确定二进制precision=ceil(log2(10^m))的下限 考虑到这一点,可能没有严格的上限,因为任何较低的2次方进位(转换为基数10时)都可能影响任何较高的基数10 因此,这可能是一个动态问题,需要评估m个二进制数字处的分数扩展,并确定哪些额外的二进

我一直在玩弄计算2的平方根之类的东西。很容易想出一个算法来产生n个正确的二进制数字。我想要帮助的是确定我需要多少二进制数字才能得到m个正确的十进制数字?m个二进制数字将得到m个十进制数字,但m个十进制数字可能还不完全正确


编辑: 我已经确定二进制
precision=ceil(log2(10^m))
的下限

考虑到这一点,可能没有严格的上限,因为任何较低的2次方进位(转换为基数10时)都可能影响任何较高的基数10

因此,这可能是一个动态问题,需要评估m个二进制数字处的分数扩展,并确定哪些额外的二进制数字可能会导致基数为10的进位



编辑2:我可能想得太多了。在初始计算之后,我可以继续加(1x10^(-precision)),并对结果进行平方运算,直到我超过2,然后减去(1x10^(-precision)),我就会得到我的答案。尽管如此,我仍然对寻找/开发这样一种算法感兴趣。:)

您使用的是什么方法

我假设在
y=x^2

整数部分受结果
sqrt(y)
限制,不能剪切,否则结果会出错。但是,
x
受到
y
的一半位的限制,因此:

ni2 = log2(|y|)
分数部分很棘手,请参见:

但在第一个数字的非线性开始后,依赖性在此稳定,与链接答案相反:

nf2 = (((nf10-7.810)/9.6366363636363636363636)+1.0)<<5;

你在用什么方法

我假设在
y=x^2

整数部分受结果
sqrt(y)
限制,不能剪切,否则结果会出错。但是,
x
受到
y
的一半位的限制,因此:

ni2 = log2(|y|)
分数部分很棘手,请参见:

但在第一个数字的非线性开始后,依赖性在此稳定,与链接答案相反:

nf2 = (((nf10-7.810)/9.6366363636363636363636)+1.0)<<5;

设x为实数,y为其近似值

设RE为y相对于x的相对误差:

RE(x,y)=abs(x-y)/abs(x)

设b为非负整数。基准b中的日志相对误差定义为:

LREb(x,y)=-logb(RE(x,y))

其中logb是以b为底的对数:

logb(z)=log(z)/log(b)

对于任何非负z

基数b中的LRE表示x和y之间的公共位数。这里,“正确位数”不是一个整数,而是一个实数:这将简化下一步的计算,避免需要ceil和floor函数,前提是我们接受诸如“y相对于x有2.3个正确位数”之类的语句。更准确地说,如果x和y具有q公共基b数字,则:

LREb(x,y)>=q-1

根据这些方程,如果相对误差有上界,则LREb有下界。更准确地说,如果:

RE(x,y)=-logb(ε)

此外,如果基数10中的正确位数为LRE10=p,则RE=10^-p,这意味着基数2中的正确位数为:


LRE2=-log2(10^-p)

设x为实数,y为其近似值

设RE为y相对于x的相对误差:

RE(x,y)=abs(x-y)/abs(x)

设b为非负整数。基准b中的日志相对误差定义为:

LREb(x,y)=-logb(RE(x,y))

其中logb是以b为底的对数:

logb(z)=log(z)/log(b)

对于任何非负z

基数b中的LRE表示x和y之间的公共位数。这里,“正确位数”不是一个整数,而是一个实数:这将简化下一步的计算,避免需要ceil和floor函数,前提是我们接受诸如“y相对于x有2.3个正确位数”之类的语句。更准确地说,如果x和y具有q公共基b数字,则:

LREb(x,y)>=q-1

根据这些方程,如果相对误差有上界,则LREb有下界。更准确地说,如果:

RE(x,y)=-logb(ε)

此外,如果基数10中的正确位数为LRE10=p,则RE=10^-p,这意味着基数2中的正确位数为:


LRE2=-log2(10^-p)

您的意思是精度=ceil(log2(10^-m)),m前面有一个负号,不是吗?m表示位数(正)。如果m=5个十进制数字,那么我需要至少一个精度=ceil(log2(10^5))=17。另一方面,ceil(log2(10^-5))=-16,这不是我想要的。我需要将等式更改为-floor(log2(10^-m))。当然,如果没有前导负号,后一个等式会给出一个负的精度值——这可能更可取。您的意思是精度=ceil(log2(10^-m)),m前面有一个负号,不是吗?m表示位数(正)。如果m=5个十进制数字,那么我需要至少一个精度=ceil(log2(10^5))=17。另一方面,ceil(log2(10^-5))=-16,这不是我想要的。我需要将等式更改为-floor(log2(10^-m))。当然,如果没有前导的负号,后一个方程会给你一个负的精度值——这可能更可取。似乎可以使用这些方程,但是,在计算近似值y之前,你需要知道x。假定2的平方根已发布到大约10万亿个十进制数字;但我更喜欢一种不需要实际值(这么多位数)的方法来确定估计值是否正确为了从精确值x及其近似值y估计LRE,你确实需要知道x的值。这