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

  • 相关阅读:
    [codevs]线段树练习5
    【Java学习笔记之十六】浅谈Java中的继承与多态
    【Java学习笔记之十五】Java中的static关键字解析
    【Java学习笔记之十四】Java中this用法小节
    【Java学习笔记之十三】初探Java面向对象的过程及代码实现
    【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
    hdu2896 AC自动机
    hdu2222 AC自动机
    字符串匹配--AC自动机模板
    字符串匹配--(K)MP模板
  • 原文地址:https://www.cnblogs.com/weijieAndy/p/3988058.html
Copyright © 2011-2022 走看看