中语言计算技术研究与发展联盟
舒生羽 wzyorg@gmail.com
计算是程序的本质所在,数学计算更是程序的源头。因此,更由于数学计算在科学研究与工业生产中的重要性,程序语言对数学计算有着强大表达力很多时候是程序员对编程语言的一个基本要求。
然而,有人指出,现代计算机从未实现过真正数学意义上的数的概念。的确如此,比如数学上的数是无限的,这对于现代计算机就是一个难以逾越的障碍。不过人们通过越来越强大的硬件和软件来向这一能力逼近。
中语言以提供强大的计算能力为重要设计目标之一,而且尤其重视科学计算。前面曾介绍过中语言直接映射了数学里面的五大代数系统(整数、有理数、实数、复数、四元数),并且每个系统的数可以有无限多的爻位。这些使得使用中语言实现科学计算程序可以得到相当的便利。
在中语言里多精度计算指的就是对于那类具有无限爻位的数的计算。这些数的类是以‘太’来表示容量的五大代数系统之一。这样,中语言的多精度计算与通常的使用计算机自然支持的算术在形式上几乎无区别。
中语言的多精度计算建立在著名的多精度计算库gmp之上,这个库里面包括mpz、mpq、mpf、mpc等,这个库也是gcc的依赖库。
下面就是一个使用中语言整数型的多精度计算的例子。
来 朴库.标准进出; 道: ()->()= { 甲: 太元= 1#"111222333444555666777888999"; 打印文套("甲 = "); 甲.写出(); 打印字('\n'); 乙: 太元= 1#"123456789123456789123456789"; 打印文套("乙 = "); 乙.写出(); 打印字('\n'); 途一: 太元; 甲 * 甲 + 2 -: [向 目] * 甲 * 乙 + 乙 * 乙 -> 途一; 打印文套("第一种平方和 = "); 途一.写出(); 打印字('\n'); 打印文套("甲 = "); 甲.写出(); 打印字('\n'); 打印文套("乙 = "); 乙.写出(); 打印字('\n'); 途二: 太元; (甲 + 乙) * (甲 + 乙) -> 途二; 打印文套("第二种平方和 = "); 途二.写出(); }
程序的执行结果如下图所示: