以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  [原创]函数fracpart有BUG?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=4757)

--  作者:z7c9
--  发布时间:2011/1/9 16:47:04
--  [原创]函数fracpart有BUG?

Test:

以下内容为程序代码:

1 frac:fracpart(mindiff*100),linethick0;

 

在黄金连续上的结果为1?

 

图片点击可在新窗口打开查看


--  作者:fly
--  发布时间:2011/1/10 9:15:17
--  

感谢提交,下个版本会更正.


--  作者:王锋
--  发布时间:2011/1/10 10:07:46
--  

这是CPU的浮点运算误差导致的问题,CPU在进行浮点数的乘除运算时,不可避免的会出现一定的误差,比如mindiff*100这种情况我们会认为是1,但实际上计算结果是0.99999994等这种情况,所以在出现需要小数位的精确结果时,需要对浮点数进行强行的小数位整理才行。

AA:=ROUNDS( mindiff*100,0 );
frac:fracpart(AA),linethick0;

 

这样就正确了


--  作者:tittat
--  发布时间:2011/1/10 12:27:35
--  
是的,要用round将数圆整。这不能算作bug,即使高级语言编程中也会有此类问题。
--  作者:阿火
--  发布时间:2011/1/10 12:47:22
--  

我也去测试了一下,发现一个问题

fracpart(-0.01)  返回的结果是 -0.99   正确应该是 -0.01

fracpart(-3.4)  返回的结果是   -0.6     正确应该是 -0.4

 

只要是负数,返回的结果都不对。除非是小数点刚好是 .5


--  作者:admin
--  发布时间:2011/1/10 13:01:29
--  

金字塔采用向下取整取小数方法,对于取绝对小数位,做绝对值处理即可