zoukankan      html  css  js  c++  java
  • 对非正确使用浮点型数据而导致项目BUG的问题探讨

    乘法分配律

    在上小学的时候就已经学习过乘法分配律,乘法分配律的详细内容是:两个数的和与一个数相乘。能够先把他们分别与这个数相乘,再相加。得数不变。乘法分配律的定义还能够用表达式“(a+b)×c = a×c+b×c”的形式给出。乘法分配律的反用“a×c+b×c = (a+b)×c”相同成立。比如“10.2×(3+7) = 10.2×3+10.2×7 = 102”(反用形式为“10.2×3+10.2×7 = 10.2×(3+7) = 102”)。

    计算机世界中的乘法分配律

    为了一窥计算机世界中的乘法分配律。本文给出下面实例进行探究。

    本例中先将整数24(纪念儿时玩过的名为“24点”的游戏)切割成四个整数的和,此部分操作在GetNumberList()方法中实现。切割后的四个整数保存进结构体变量中,整数24的全部切割结果则保存进List<Number>类型的集合numList中。接着遍历集合numList。每次遍历中先取出24的四个切割数分别与5相乘再相加(相当于乘法分配律中的a×c+b×c部分)得到结果result1。再将计算的结果result1与24 * 5(相当于乘法分配律中的(a+b)×c部分)的结果result进行比較。相等则输出true,否则输出false。

    using System;
    using System.Collections.Generic;
    namespace NoticeDetailExp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Number> numList = new List<Number>();
                numList = GetNumberList();
                int result = 24 * 5;
                int result1;
                foreach (Number n in numList)
                {
                    result1 = n.Num1 * 5
                            + n.Num2 * 5
                            + n.Num3 * 5
                            + n.Num4 * 5;
                }
                Console.WriteLine("n.Num1={0}, n.Num1={1}, n.Num1={2}, n.Num1={3}:result1 == result?

    {4}", n.Num1, n.Num2, n.Num3, n.Num4, result1 == result); } private static List<Number> GetNumberList() { List<Number> numList = new List<Number>(); for(int i=0; i<=24; i++) for(int j=0; j<=24; j++) for(int k=0; k<=24; k++) for(int l=0; l<=24; l++) if (i + j + k + l == 24) {

  • 相关阅读:
    拼接表达式树的原理
    ql Server 2012完全卸载方法
    jquery tmpl 详解
    Entity Framework(EF) Code First将实体中的string属性映射成text类型的几种方式
    Entity Framework 数据生成选项DatabaseGenerated
    Entity Framework 复杂类型
    EF Code First 学习笔记:约定配置
    比特币转账流程
    mmap 的理解
    copy_to_user,copy_from_user,get_user,put_user函数比较
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6802571.html
Copyright © 2011-2022 走看看