zoukankan      html  css  js  c++  java
  • 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 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

  • 相关阅读:
    利用iframe实现ajax 跨域通信的解决方案
    C++中事件机制的简洁实现
    java远程类加载与轻客户端
    iOS开发那些事性能优化–内存泄露问题的解决
    Asp.net项目的开发流程
    LVS配置教程
    PowerShell之东扯西谈
    响应式设计专题
    2013年最值得关注的网页设计流行趋势
    HTTP Live Streaming直播技术分析与实现
  • 原文地址:https://www.cnblogs.com/weijieAndy/p/3988058.html
Copyright © 2011-2022 走看看