首页 > 代码库 > 1.1确定分数与浮点数值之间的近似相等性。
1.1确定分数与浮点数值之间的近似相等性。
知识点:
1.Double.Epsilon字段和Single.Epsilon字段
2.Float和double近似值比较
问题:
需要比较一个分数和一个double或float类型的值,确定它们彼此是否很接近。例如,我们来看表达式1/6和值0.16666667的比较结果。看上去这二者是相等的,但是0.16666667只精确到小数点右边的8位,而1/6则精确到数据类型所允许的小数点右边的最大位数。
解决方案:
比较一个分数和一个浮点值之间的近似相等性,需要检查连个值之差是否在一个可接受的范围内:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _03确定分数与浮点数值之间的近似相等性 8 { 9 class Program10 {11 static void Main(string[] args)12 {13 Console.WriteLine("输入第一个数的分子:");14 var numerator = Console.ReadLine();15 Console.WriteLine("输入第一个数的分母:");16 var denominator = Console.ReadLine();17 Console.WriteLine("请输入浮点型的比较值:");18 var dblValue=http://www.mamicode.com/ Console.ReadLine();19 Console.WriteLine("请输入精度:");20 var epsilon = Console.ReadLine();21 bool IsGoodApproximate= IsApproximatelyEqualTo(Convert.ToDouble(numerator), Convert.ToDouble(denominator), Convert.ToDouble(dblValue),Convert.ToDouble(epsilon));22 if (IsGoodApproximate)23 {24 Console.WriteLine("Good approximate");25 }26 else27 {28 Console.WriteLine("Bad approximate");29 }30 Console.ReadKey();31 }32 33 //使用System.Double.Epsilon值34 public static bool IsApproximatelyEqualTo(double numerator, double denominator, double dblValue) 35 {36 return IsApproximatelyEqualTo(numerator, denominator, dblValue, double.Epsilon);37 }38 39 private static bool IsApproximatelyEqualTo(double numerator, double denominator, double dblValue, double epsilon)40 {41 double difference = (numerator / denominator) - dblValue;42 if (Math.Abs(difference)<epsilon)43 {44 //这是一个很好的近似(足够近似)45 return true;46 }47 else48 {49 //这是一个不好的近似(不够近似)50 return false;51 }52 }53 54 }55 }
结果:
bool IsGoodApproximate= IsApproximatelyEqualTo(1,7,.142857,.0000001);
//Approximate==false
bool IsGoodApproximate= IsApproximatelyEqualTo(1,7,.1428571,.0000001);
//Approximate==true
1.1确定分数与浮点数值之间的近似相等性。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。