对非正确使用浮点型数据而导致项目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)
{
对非正确使用浮点型数据而导致项目BUG的问题探讨的更多相关文章
- 非正确使用浮点数据由项目产生BUG讨论的问题
乘分配 当小学学会了乘法分配.详细乘法分配:并与多个两个数相乘的,他们能够把这个数字乘以,然后加入.由于一个恒定.乘法分配律也能够使用表达式的定义"(a+b)×c = a×c+b×c&quo ...
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...
- Java中浮点型数据Float和Double进行精确计算的问题
Java中浮点型数据Float和Double进行精确计算的问题 来源 https://www.cnblogs.com/banxian/p/3781130.html 一.浮点计算中发生精度丢失 ...
- 14、Java中用浮点型数据Float和Double进行精确计算时的精度问题
一.浮点计算中发生精度丢失 大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况.来看下面的例子. // 这是一个 ...
- 【C语言入门教程】2.4 浮点型数据
浮点型数据又称实型数据,是一个以十进制表示的符号实数.符号实数的值包括整数部分.尾数部分和指数部分. 2.4.1 浮点型常量 一些较大的数值,或者有小数位.指数位的数值都需要用浮点型常量表示.浮点型常 ...
- 如何正确选择MySQL数据列类型
MySQL数据列类型选择是在我们设计表的时候经常会遇到的问题,下面就教您如何正确选择MySQL数据列类型,供您参考学习. 选择正确的数据列类型能大大提高数据库的性能和使数据库具有高扩展性.在选择MyS ...
- 使用CHttpFile从服务器端正确的读取数据
前段时间在给软件做升级提示模块的时候发现一个问题,就是使用CHttpFile对象无法从服务器端获取到正确的响应数据长度,无论是使用CHttpFile:: QueryInfo方法,还是使用CHttpFi ...
- java 非缓冲与缓冲数据读取比较
首先不适用缓存技术,读取数据: //非缓冲计时 package com.swust; import java.io.*; /* *功能:创建一个程序,写10000个随机双精度的数到一个文件中,同时测试 ...
- MyBatis异常:元素内容必须由格式正确的字符数据或标记组成
今天在写接口查询SQL时,报了一个异常,如下: Cause: org.apache.ibatis.builder.BuilderException: Error creating document i ...
随机推荐
- 前端工程师必备PS技能
PS参考线及其辅助 视图-->新建参考线 也可以快捷键Ctrl+R,显示区的上侧和左侧就会出现标尺.任意点选中,并拖动标尺,便会出现浅蓝色的辅助线.只有在移动工具下,才能拖动某一条参考线. 删除 ...
- 关于ofbiz加载数据模块的文件参数配置
1,在applications文件夹下新建一个数据模块meetingroom 2, 要让ofbiz加载这个数据模块就需要在applications下的配置文件里修改参数 (1)在application ...
- 肖申克的救赎 -Hope
典狱长诺顿高高在上,平时道貌岸然,对圣经倒背如流,实际上攫取利益时不择手段,残酷.阴险而贪婪.狱警长海利和其他警员,凶狠残暴,充当诺顿的打手,草菅囚犯的人命.他们是不是象极了我们现实中的掌权阶层?我称 ...
- UVALive 3882.And Then There Was One-约瑟夫问题(递推)
And Then There Was One Time limit: 3.000 seconds Let’s play a stone removing game. Initially, n ston ...
- Python的异步编程[0] -> 协程[1] -> 使用协程建立自己的异步非阻塞模型
使用协程建立自己的异步非阻塞模型 接下来例子中,将使用纯粹的Python编码搭建一个异步模型,相当于自己构建的一个asyncio模块,这也许能对asyncio模块底层实现的理解有更大的帮助.主要参考为 ...
- 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- disabling IPv6 name/address support: Address family not supported by protocol
禁用IPv6 后影响邮件发送设置 vim /etc/postfix/main.cf # Enable IPv4, and IPv6 if supported inet_protocols = all
- python3开发进阶-Django框架的ORM常用字段和参数
阅读目录 常用字段 字段合集 自定义字段 字段参数 关系参数 多对多的关联关系的三种方式 一.常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中 ...
- 【R笔记】glm函数报错原因及解析
R语言glm函数学习: [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. glm函数介绍: glm(for ...
- map写数据到本地磁盘过程解析----spill和merge
如上次分析,其实map函数中的context.write()调用过程如下所示: 梳理下调用过程,context的write方法其实是调用了TaskInputOutputContext类的write方法 ...