以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 );
这样就正确了 |
-- 作者: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 -- 金字塔采用向下取整取小数方法,对于取绝对小数位,做绝对值处理即可 |