码迷,mamicode.com
首页 > 其他好文 > 详细

1.1确定分数与浮点数值之间的近似相等性。

时间:2014-09-23 14:39:14      阅读:238      评论:0      收藏:0      [点我收藏+]

标签: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则精确到数据类型所允许的小数点右边的最大位数。

 

解决方案:

比较一个分数和一个浮点值之间的近似相等性,需要检查连个值之差是否在一个可接受的范围内:

 

bubuko.com,布布扣
 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 }
View Code

 

结果:

bool IsGoodApproximate= IsApproximatelyEqualTo(1,7,.142857,.0000001);
//Approximate==false

bool IsGoodApproximate= IsApproximatelyEqualTo(1,7,.1428571,.0000001);
//Approximate==true

1.1确定分数与浮点数值之间的近似相等性。

标签:style   blog   http   color   io   os   使用   ar   数据   

原文地址:http://www.cnblogs.com/weijieAndy/p/3988058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!