文档章节

WindowsAPI: MulDiv

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 269
阅读 2
收藏 0

MulDiv(a, b, c) 中的 a、b、c 是三个 Integer, 同时返回一个 Integer.

其计算方式类似于: a * b / c 或 a * b div c, 但也有区别.

//例一: 相同处
var
  a,b,c,n1,n2: Integer;
begin
  a := 4;
  b := 3;
  c := 2;
  n1 := a * b div c;
  n2 := MulDiv(a, b, c);
  ShowMessageFmt('%d : %d', [n1, n2]); {6 : 6}
end;

 
 
 
 
 

 

 

  

//例二: MulDiv 中前两个 32 位整数 a 和 b 相乘后会先得出一个 64 位整数, 这可以尽量使运算不会溢出.
var
  a,b,c,n1,n2: Integer;
begin
  a := MaxInt div 2;
  b := 3;
  c := 2;
  n1 := a * b div c;     {这个运算会溢出}
  n2 := MulDiv(a, b, c); {MulDiv 会算出正确的结果}
  ShowMessageFmt('%d : %d', [n1, n2]); {-536870913 : 1610612735}
end;

 
 
 
 
 

 

 

  

//例三: MulDiv 会自动四舍五入.
var
  a,b,c,n1,n2: Integer;
begin
  a := 1;
  b := 7;
  c := 4;
  n1 := a * b div c;     {这个结果只是截取了整数部分}
  n2 := MulDiv(a, b, c); {MulDiv 会四舍五入}
  ShowMessageFmt('%d : %d', [n1, n2]); {1 : 2}
end;

 
 
 
 
 

 

 

  

//例四: 也有 MulDiv 算不了的, 算不了就返回 -1
var
  n1,n2: Integer;
begin
  n1 := MulDiv(MaxInt, MaxInt, 2);
  n2 := MulDiv(1, 2, 0);
  ShowMessageFmt('%d : %d', [n1, n2]); {-1 : -1}
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/10/09/1579553.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
删除ARP表的Windows API

想找一个Windows API,功能是清空ARP表的,就是DOS下“arp -d”功能的函数,但没找到,望大神不吝赐教,万分感谢

日天_Geek
2016/03/27
160
0
关于控制台中reg命令

在cmd中,我们使用 即可导出注册表项,其中mytree是我手动创建的。 然后我在vs里面调用 就提示 “系统找不到指定的注册表项或值” 如果导出的是注册表里面本来就有的东西,比如 就可以正确导...

开源中国首席问题男
2015/04/28
64
1
c++string如何读取在文本中的unicode编码

c++string如何读取在文本中的unicode编码,比如读取文本中的\u6C49\u5B57,解析成“汉字”,而不是解析成字符串。本人用原生c++,不依赖微软的库和WindowsAPI。对能给出正解的人万分感谢!...

编程老头
2013/05/12
6.4K
8
Wine 项目面临的困境

Wine项目的目标是试图在Linux上实现一个Windows API层。虽然目前已能完美运行许多Windows程序,但仍旧存在很多缺陷,例如一个长期遗留的bug 421是DIB engine(设备无关位图文件引擎)。 Wine...

红薯
2009/05/25
548
0
[2013.9.6]说说Win7的Aero效果

最近看到别人写的一个例程,就是把控制台弄成了全透明,我把源码下载下来做了研 究。 其实从Vista版本之后,WindowsAPI里面增加了几个函数,用于Aero效果的实现。有 两个最主要的:DwmExtend...

apachecn_飞龙
2014/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

详解如何实现一个简单的 vuex

首先我们需要知道为何要使用 vuex。父子组件通信用 prop 和自定义事件可以搞定,简单的非父子组件通信用 bus(一个空的 Vue 实例)。那么使用 vuex 就是为了解决复杂的非父子组件通信。 仅仅...

嫣然丫丫丫
8分钟前
0
0
算法——RangePartitioner实现之reservoirSample

简介 reservoir的作用是:**在不知道文件总行数的情况下,如何从文件中随机的抽取一行?**即是说如果最后发现文字档共有N行,则每一行被抽取的概率均为1/N? 我们可以:定义取出的行号为cho...

freeli
10分钟前
0
0
Python安装及netcdf数据读写

一、在CentOS7系统上安装Python3 在anaconda官网下载(http://https://www.anaconda.com/download/#linux)(Anaconda指的是一个开源的Python发行版本,是Python的包管理器和环境管理器) 下...

voole
14分钟前
0
0
基于NEO的私链(Private Blockchain)

1.准备工作 1.NEO-GUI 2.NEO-CLI 3..NET Core Runtime (不能是2.x版本,官方建议是1.12,实际上我用1.14也是没有问题的) 4.四台windows操作系统的虚拟机(本文是基于AWS的,理论上本地跑虚...

NEO-FANS
21分钟前
0
0
linux中shell if 判断总结

UNIX Shell 里面比较字符写法 -eq 等于; -ne 不等于; -gt 大于; -lt 小于 ; -le 小于等于; -ge 大于等于; -z 空串; -n 非空串; = 两个字符相等; != 两个字符不等 无论什么编程语言都离不开条...

linuxprobe16
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部