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

  • 相关阅读:
    eclipse的优化 gc.log
    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
    JVM系列三:JVM参数设置、分析
    热加载
    彻底理解JAVA动态代理
    Linux下查看Web服务器当前的并发连接数和TCP连接状态
    个人博客 V0.0.3 版本 ...
    HTML5本地存储——IndexedDB(一:基本使用)
    如何在Blog中加入Google Analytics
    webpack中实现按需加载
  • 原文地址:https://www.cnblogs.com/weijieAndy/p/3988058.html
Copyright © 2011-2022 走看看