你真正理解AllowUnroundedFloatingPointOperations选项的含义吗

___情绪疯子__

___情绪疯子__

2016-02-19 19:26

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的你真正理解AllowUnroundedFloatingPointOperations选项的含义吗,手机电脑控们准备好了吗?一起看过来吧!
来自微软的资料鼓吹:高级优化对话框中的所有编译选项都被认为是不稳定的,它们可能导致不正确的结果,甚至程序崩溃。对于其中的大多数,这种说法是正确的,但是经常有一个叫做"AllowUnroundedFloatingPointOperations"的选项能够给予正确的结果,防止应用程序产生bug。考虑下面的代码段:
  
  DimxAsDouble,yAsDouble,iAsInteger
  
  x=10^18
  
  y=x 1'thiscan'tbeexpressedwith64bits
  
  MsgBox(y=x)'显示"True"(不正确的结果)
  
  
  严格地说,由于X和Y变量不包含相同的数值,MsgBox将显示False。可问题是,由于数值1E18与1E18+1都以相同的64位浮点Double类型来表示,它们最终包含了几乎相同的数值,最后的MsgBox结果将是True。
  
  如果打开了"AllowUnroundedFloatingPointOperations"编译选项,VB就能重用已在数学协处理器堆栈中的数值,而不是内存中的数值(比如:变量)。因为FPU堆栈具备80位的精度,因此就可以区分出这2个数值的不同:
  
  
  'iftheprogramiscompiledusingthe
  
  '"AllowUnroundedFloatingPointOperations"compileroption
  
  MsgBox(y=x)'显示"False"(正确的结果)
  
  
  总结一下:当以解释模式、或者编译的p-code模式、或者编译的native代码模式但关掉"AllowUnroundedFloatingPointOperations"选项这3种方式运行一个程序时,所有浮点数字运算在内部都以80位的精度进行处理。但如果有一个数值是存储在64位Double变量中,结果就是接近的了,并且,随后使用那个变量的表达式也将产生近似的结果,而不是绝对正确的结果。
  
  相反,如果打开"AllowUnroundedFloatingPointOperations"编译选项后运行一段native编译代码,在随后的表达式中VB就经常能重用内部的80位数值,而忽略存储在变量中的当前数值。注意:我们并不能完全控制这个功能,VB也许对此生效,也许就不生效,这要取决于表达式的复杂程度以及最初分配数值语句与随后产生结果的表达式语句的距离远近。->

展开更多 50%)
分享

猜你喜欢

你真正理解AllowUnroundedFloatingPointOperations选项的含义吗

编程语言 网络编程
你真正理解AllowUnroundedFloatingPointOperations选项的含义吗

怎样让宝宝真正理解数字

电脑网络
怎样让宝宝真正理解数字

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

太极拳视频 如何真正理解太极拳的内涵

太极拳 太极拳教程 二十四式简化太极拳 杨氏太极拳 42式太极拳 陈氏太极拳
太极拳视频 如何真正理解太极拳的内涵

太极拳视频 理解太极拳真正内功的含义

太极拳教程 太极拳 二十四式简化太极拳 杨氏太极拳 42式太极拳 陈氏太极拳
太极拳视频 理解太极拳真正内功的含义

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

太极拳视频 讲解怎样理解太极拳真正含义

太极拳 太极拳教程 二十四式简化太极拳 杨氏太极拳 42式太极拳 陈氏太极拳
太极拳视频 讲解怎样理解太极拳真正含义

无痛分娩的真正含义

分娩
无痛分娩的真正含义

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

创建新表时快速拷贝字段

创建新表时快速拷贝字段

访问Access数据库(JSP+Tomcat 5.5.20)

访问Access数据库(JSP+Tomcat 5.5.20)
下拉加载更多内容 ↓