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

  • 相关阅读:
    activiti 清库脚本(转)
    T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
    Chrome firefox ie等浏览器空格(&nbsp;)兼容问题
    activiti5.22整合modeler时出错TypeError: Cannot read property 'split' of undefined
    activiti如何获取当前节点以及下一步路径或节点(转)
    Activiti5 添加/查询审批批注(审批意见)
    Django中多对多关系的orm表设计
    css背景雪碧图等
    Django图书管理系统(前端对有外键的数据表增删改查)
    Django图书管理系统(前端对数据库的增删改查)
  • 原文地址:https://www.cnblogs.com/weijieAndy/p/3988058.html
Copyright © 2011-2022 走看看