VB与Excel在乘幂运算时的结果差异及其不合理性

原创 2004年07月05日 01:38:00

东北林业大学环境科学系 隋祥

引言

表达式解析是编程工具与电子表格等软件最基本的功能之一,不同的软件在解析表达式时都遵循一定的运算规则,在不同软件中,这些运算规则略有差异,导致计算结果也不同。笔者在实践中发现,VBExcel在处理“连续乘幂”这一常见运算时,所遵循的法则有着较大的出入,而且都存在着不合理的因素。本文试图通过论述得到一种更为合理的运算模式,并为编写表达式解析类过程提供指导。

问题分析

下表列出了VB6.0Excel2003在处理同一个关于乘方运算的表达式时所得到的结果。

1  VB6.0Excel2003执行乘方运算的结果差异<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

表达式

VB计算结果

Excel计算结果

2^-2^-2

.840896415253715

16

-2 ^ 2

-4

4

-2^-2^-2

-.840896415253715

16

2 ^ -3 ^ 4 ^ 7

0

5.16988E-26

   本人经过分析,认为引起结果差异的主要因素是单目运算符“-”的运算级和连续乘幂的运算顺序。详细分析如下:

   1.对于表达式2^-2^-2VB的计算步骤是2^(-2^-2)= .840896415253715,这时它的计算顺序是从右到左,而Excel则严格按照从左到右的结合顺序。如果我们把2^-2^-2理解为<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />,那么,显然VB的计算结果是合理的,但是不是VB在处理连续乘方运算时都是从右到左的呢?答案是否定的。在计算2^3^4时,VB得到的结果是4096而不是2.41785163922926E+24,这说明此时VB并没有把2^3^4理解为而是理解为,是从左到右的结合顺序。显然,VB在处理乘方运算时,其结合顺序没有一个令人信服的依据,并存在不合理性。

   2.对于表达式-2^2VB的计算过程相当于-(2^2)=-4,按照Microsoft MSDN 6.0 简体中文版VB帮助系统中的《运算符优先顺序》一文中的描述,指数运算符(^)高于负数运算符(-)。这样看来VB按照这样的法则得到这样的结果是合理的。对于Excel,它的计算过程相当于(-2)^2,按照Excel 2003版帮助文档的叙述,符号(-)要高于乘幂(^)(注:两款软件运算符的中文名称略有差异),那么这样看来Excel的运算也是合理的。但是Excel将“-(负号)”的优先级放在“^”运算符之前的做法存在着一定问题。例如对于表达式4-2^24--2^24---2^24-……-n-2^2的结果都是0,这是按照上述法则令人无法顺利解释的。

   3.由于上述两条原因才导致了对于表达式-2^-2^-2的计算结果的不同。

   4. 对于表达式2 ^ -3 ^ 4 ^ 7VB计算结果为0,这是无论如何也无法顺利解释的。关于此结果的来历还有待于进一步研究。

表达式解析法则建议

    鉴于VBExcel在解析表达式时对乘幂运算的结果差异及所存在的不合理性,建议在编写表达式解析过程时应当遵循如下原则:

    1.建议将乘幂运算符“^”的优先级至于单目负数运算符“-”之前。

    2.在连乘幂运算的结合顺序上应当统一,建议采用从左到右的结合方式。

 

欢迎大家批评指正。

VB与Excel在乘幂运算时的结果差异及其不合理性

  • zgqtxwd
  • zgqtxwd
  • 2008年04月24日 08:52
  • 111

使用vb将查询结果导出为excel文件

将查询信息导出为excel文件输出输入:param1 string database名字            param2 string sql语句Public Sub SaveAsExcel(da...
  • RainyBoo
  • RainyBoo
  • 2006年01月08日 00:21
  • 1327

VB中操作Excel的一般做法(读取)

1、定义Excel操作变量Dim objExcelFile As Excel.ApplicationDim objWorkBook As Excel.WorkbookDim objImportShee...
  • venus0314
  • venus0314
  • 2006年01月09日 10:37
  • 3355

EXCEL里趋势线

什么是趋势线 趋势线用图形的方式显示数据的预测趋势并可用于预测分析,也称回归分析。利用回归分析,可以在图表中扩展趋势线,根据实际数据预测未来数据。例如,下面的图表运用前四个季度的简单线性趋势预测第二年...
  • YABIGNSHI
  • YABIGNSHI
  • 2014年02月24日 18:14
  • 1677

VB中对EXCEL的各种操作

全面控制 Excel 首先创建 Excel 对象,使用ComObj: Dim ExcelID as Excel.Application Set ExcelID as new Excel.Applica...
  • wzk456
  • wzk456
  • 2017年02月08日 15:20
  • 4696

VB操作EXCEL

看了网上很多相关的博客,大都不太完全适用,在这里把一上午摸索出来的结果总结出来。形成一个更适于上手的例子。      首先工程--à引用,选择Microsoft office EXCEL 14.0 l...
  • u013521188
  • u013521188
  • 2016年07月23日 09:19
  • 412

利用EXCEL 实现字符串的计算

     如何计算给定的字符串计算表达式,如“ 1+2*3-4/5+ 6^7” 的值?笔者在使用EXCEL2002 时发现在单元格中可以输入此类表达式,输出的则是计算结果,所以写了一个函数,与大家共享...
  • northwolves
  • northwolves
  • 2004年04月07日 22:20
  • 1967

笛卡尔积、除、(外)连接等重要关系代数求解方法 概述

关系代数 这部分知识,在软考-数据库部分是比较重要的。       有五种基本的关系代数运算,并(符号为V)、差(符号为^)、投影()、笛卡尔积、选择,补充关系代数运算有,交、连接、除、...
  • lfsfxy9
  • lfsfxy9
  • 2010年10月20日 07:41
  • 16715

栈的定义以及基本运算

栈和队列实质上是俩种受限制的线性表
  • XSF50717
  • XSF50717
  • 2014年10月09日 19:30
  • 1097

用VB 代码读取 Excel 内容

常规的方法可能是循环读取每一行每一个格子的内容并存入 Recordset 并保存 此处使用Open Recordset 的方式,将 Excel Worksheet 作为一个数据源直接读取 ...
  • DJ2008
  • DJ2008
  • 2017年05月25日 11:16
  • 2270
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB与Excel在乘幂运算时的结果差异及其不合理性
举报原因:
原因补充:

(最多只允许输入30个字)