请教关于C/C++的超大数据计算的问题
小弟我最近在做课程报告的时候遇到这个问题:
题目要求大致是求函数y=|sin(e^x)|在0--5120的DFT变换。
但是在一开始我就被卡住了,e^5120是个非常大的数据,一般64f的数据类型只能保存到e^700+左右,所以e^700--e^5120是不能直接进行存取的。我首先想到的是sinx是个周期为2π的函数,我可以将e^x减去一个非常大的数(N*2π),这样结果就可以直接保存然后参与正弦函数的运算。得到N的方法是:N=floor(f(x)/2π)。
于是我就把e^x用泰勒公式展开:e^x=∑(x^n)/n!,然后展开的每一项都减去N*2π,最后吧结果全部加起来就可以得到比较小的数。
但是。。。
e^5120这么大的数,泰勒公式展开的某一项都大到溢出了。。比方说e^5120展开到5120^500/500!的时候就已经溢出了,更别说做接下来的运算了。。
我知道C语言里大数据可以用字符串保存然后按位运算,但写个四则运算的算法还行,这可是指数函数啊,小弟我是没辙了,所以请假各位大神有没有什么好的解决方法。。。