正面教材分享 http://blog.sciencenet.cn/u/wdlang 70%的以色列人是无神论者,不过他们都相信上帝给了他们那块土地。这个世界经不起思考

博文

计算2的任意高次幂

已有 3948 次阅读 2019-5-27 10:46 |个人分类:计算方法|系统分类:教学心得

一般计算机是存在溢出的。要实现任意精度计算,不得不在软件上下功夫。

下面的程序用于计算2的任意高次幂。

===============================

clear all; close all; clc; 

N = 67;

numdig = floor(N* log10(2)) + 1 ;

digits = zeros(1, numdig);

digits(end) = 1 ;

digit_current = 1 ;


for s = 1 : N

    if digits(numdig - digit_current +1 ) > 4 

        digit_current = digit_current + 1 ;

    end

    for s2 = (numdig - digit_current +1) : (numdig-1)

        if digits(s2 +1) <=4

            digits(s2) = mod ( 2*digits(s2),10) ;

        else

            digits(s2) = mod(2*digits(s2) + 1, 10);

        end

    end

    digits(end) =  mod ( 2*digits(end),10) ;

end

digits

通过取N为67,我们计算了cole的问题,结果如下

digits =

     1     4     7     5     7     3     9     5     2     5     8     9     6     7     6     4     1     2     9     2     8

这个算法当然是非常不经济同时效率低下的。别的不说,这里我们对每一位数字都用一个足以容纳一个整型数的空间来储存,在内存上浪费巨大。如何改进之,也许是个很好的本科生毕业设计课题。

这种高精度计算,博主在研究中遇到过两次。

一次是要分析一个波函数是否满足bethe ansatz形式。一个波函数由有限个平面波组成是个很苛刻的条件,我们想检验误差是否随浮点计算的精度提高而减小,所以需要高精度计算。相关文章在

Integrability and weak diffraction in a two particle Bose hubbard model.pdf

当时我们购买了一家日本公司(https://www.advanpix.com/ )开发的面向matlab的任意精度计算工具包,这家公司可能就老板一个人,研发和销售全他包了。售后很好,有问题秒回。

另外一次是要利用LLL算法寻找一个完全可积系统的poincare回归。庞加莱回归发生的时间是天文数字,所以我们需要高精度计算

Witnessing a Poincaré recurrence with Mathematica.pdf

这次我们是借用mathematica。

博主有个朋友专门做原子的精密谱计算,他们的办法是从intel采购专门的计算机,在硬件上就具有四精度甚至八精度。


作业1:修改程序,使得digits数组中每个元素存储5位数字。

作业2:编程计算 7189345829798321093*1237847291783641683763486342



https://blog.sciencenet.cn/blog-100379-1181424.html

上一篇:焦耳过程中气体温度的变化---从郭朝晖先生的一篇文章谈起
下一篇:如何击落美国间谍卫星?
收藏 IP: 172.105.235.*| 热度|

1 杨正瓴

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-20 02:33

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部