非正确使用浮点数据由项目产生BUG讨论的问题
作者:网络转载 发布时间:[ 2015/10/27 13:53:41 ] 推荐标签:软件测试管理
乘分配
当小学学会了乘法分配。详细乘法分配:并与多个两个数相乘的,他们能够把这个数字乘以,然后加入。由于一个恒定。乘法分配律也能够使用表达式的定义“(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)
{
Number num = new Number();
num.Num1 = i;
num.Num2 = j;
num.Num3 = k;
num.Num4 = l;
numList.Add(num);
}
return numList;
}
}
public struct Number
{
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public int Num4 { get; set; }
}
}
执行程序,得到下图所看到的结果。
大家从图中能看出什么呢?
【DD(不是“小弟弟”的缩写,至于是什么。你猜):我从图中能够看出。显示结果不全。
作者:呵呵。DD真是观察仔细入微。
结果是不全。可是本人通过拖动滚动栏已经确认全部返回结果都是true】
从结果了解到对于整型数据来说,乘法分配律全然适用。
那么将样例中的整型数据换成Double型数据,结果又会如何呢?
改动实例中的部分代码,其它代码保持不变,以下仅给出改动部分的代码。
//将整数5改动成Double型数183.70833333333334
//将result。result1的类型由int改动成double
double result = 24 * 183.70833333333334;
double result1;
foreach (Number n in numList)
{
//将整数5改动成Double型数183.70833333333334
result1 = n.Num1 * 183.70833333333334
+ n.Num2 * 183.70833333333334
+ n.Num3 * 183.70833333333334
+ n.Num4 * 183.70833333333334;
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);
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11