myInt = int(5 * myRandom())
myRandom()是随机生成的浮动,这应是0.2。铸造为int和浮点错误?
因此,此声明应评估为1。
我的问题:是否可能由于浮点错误而不会评估为1?
例如,如果由于浮点错误的东西应该是0.2会是比LESS? IE,例如考虑以下3种可能性:
int(5 * 0.2) = 1 //case 1 normal
int(5 * 0.2000000000000001) = 1 //case 2 slightly larger, its OK
int(5 * 0.1999999999999999) = 0 //case 3 negative, is NOT OK, as int() floors it
是情形3甚至有可能?与0.1999999999999999是一个浮点错误的结果?到目前为止,我从来没有见过一个负ε,只有情况2,当它稍微大一点时,并且没问题,就像当它投射到int()时一样,它会将其“落地”到正确的结果。然而,如果是负ε,“地板”效应将使得0.9999999999999996的结果为0.
我不认为这是可能的,不。乘法和舍入只应该注意可能的有效数字的最大数目。 – Ryan 2012-07-05 19:15:48
如果它是随机生成的,为什么“应该”是0.2? – 2012-07-05 19:19:52
这是C++,而不是C.您不能在C. – 2012-07-05 19:20:02