pxl*_*pxl 7 c math floating-point
我正在编写一个实用程序来计算π到十进制后的一百万位数.在32位或64位消费者桌面系统上,存储和使用如此大量精确到百万位数的最有效方法是什么?
澄清:语言是C.
这需要少于每兆比特1/2兆字节."高效"可能意味着许多事情.空间高效?时间效率?易于编程?
你的问题被标记为浮点数,但我很确定你根本不需要浮点数.浮点的整个想法是,我们的数据仅为一些有意义的数字所知,甚至着名的物理和化学常数也只是少数或两个数字.因此,保持合理数量的数字然后简单地记录指数是有意义的.
但你的任务完全不同.您必须考虑每一位.鉴于此,没有浮点或十进制算术包将起作用,除非它是一个模板,你可以任意大小,然后指数将是无用的.所以你也可以使用整数.
你真正需要的是一串比特.这只是一组方便的类型.我建议<stdint.h>并简单地使用uint32_t[125000](或64)开始.这实际上可能是对该标题中较为模糊的常量的一种很好的用法,它可以选择在给定平台上快速的位大小.
更具体地说,我们需要更多地了解您的目标.这是用于特定语言的练习吗?对于数论的一些调查?如果是后者,为什么不使用已经支持Bignum的语言,比如Ruby?
然后存储是别人的问题.但是,如果您真正想要的是实现一个大数字包,那么我可能会建议使用bcd(4位)字符串或甚至普通的ascii 8位字符串和可打印数字,因为事情会更容易编写和调试最大的空间和时间效率可能无关紧要.