标签:style blog http color io os 使用 ar 数据
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 Program 10 { 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= 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 else 27 { 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 else 48 { 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
标签:style blog http color io os 使用 ar 数据
原文地址:http://www.cnblogs.com/weijieAndy/p/3988058.html