日期:2014-05-18  浏览次数:20614 次

问个关于高精度除法的问题
输入一个分子、分母,类型为System.Numerics.BigInteger,再输入一个有效数字数,表示要保留的数目,多余的位四舍五入,如果除尽可以提前结束。求助一个高效算法……(无需考虑分母为0的情况)

------解决方案--------------------
本质上说,如果两个整数相除,结果必然是有限小数(也可以理解为循环节为0的无限循环小数的特例)或者无限循环小数,且循环节长度不会超过分母的大小。所以,高效的算法就是用手算的方法确定循环节,之后再根据精度要求想要多少位就有多少位。
------解决方案--------------------
var log10 = Math.Floor(Math.Log10((double)(d1 / d2)));
我感觉你这里强制类型转换可能会出错,会导致数据溢出。而且两个BigInteger相除,返回的结果还是BitInteger,就算强制转换也应该转化为Int32啊,怎么都不会是double类型。