下载 App
投票C++老毛病:double和float的浮点数误差
因为double(双精度浮点数)使用的是二进制权值展开,所以十进制和二进制反复读入读出的时候难免会不断出现误差,最后导致被吞掉几个小数点,然后一转int后面0.99999……的小数就全被吞了,这就导致实际伤害比预期少1
虽然是小毛病,但是某些时候也让人血压非常大,比如3600血的轻坦3发1560的塑胶高爆是无法斩杀的,因为经过装甲减免之后预期伤害虽然是1200,看似三发正好斩杀,实际上每一发都被吞
:
实际上,变2护甲减伤比例为
受到实际伤害=减伤前伤害 乘以(100/100+护甲值)
所以,1560的高爆塑胶打3600血30护甲的坦克就是能三下秒,因为156除以13就是12,刚好是整数,这种情况根本不存在浮点数,而且如果你玩一级房也应该经常遇到满血轻坦被3下高爆塑胶秒掉的情景吧?怎么可能一下没有1200呢




![[表情_捂脸哭]](https://img-tc.tapimg.com/market/images/83aa452eea88b5c64df710bca367b7e9.png)





![[表情_微笑]](https://img.tapimg.com/market/images/0f170d4b1ecf80c267e5a44b5992a199.png)


![[表情_微笑]](https://img-tc.tapimg.com/market/images/0f170d4b1ecf80c267e5a44b5992a199.png)







