[水一帖] 1除以0.2的余数为什么是0.2?

dea_dy-avatar

dea_dy

2021-03-02T13:37:03+00:00

今天晚上研究Unity的时候,遇到一个问题,1除以0.2的余数,本来觉得很简单一个题,商为5,余数为0。
但是结果跟我们算的完全不一样,翻了半天官方文档没搞明白怎么回事,掏出计算机一算,余数是0.2?为什么商要取4,不取5?
Silentassassin7-avatar

Silentassassin7

可能是计算算法的bug吧
Yomi-avatar

Yomi

我猜是浮点?
Sr. Luisin-avatar

Sr. Luisin

余数只作用于整数除法
ɪᴬᴹ 么™ ZᴀRɪX サ ツ-avatar

ɪᴬᴹ 么™ ZᴀRɪX サ ツ

因为浮点数吧,你看起来是0.2,实际上它可能是0.2000000001。
避免用浮点数求余吧
kurly1404-avatar

kurly1404

余数可能是0.19999999999999996
哈皮鼠-avatar

哈皮鼠

余数是在整数运算里的事情吧
TDistruttore-avatar

TDistruttore

模运算只适用于整数的。
fayte-avatar

fayte

估计是把0.2转成2进制去除了,导致0.2比实际值稍微大了一点点,不过手里面找了几个编译器都不支持浮点数的求余
有的语言0.2+0.1都不等于0.3呢
你把0.2转成64位浮点数试试
ra1v0-avatar

ra1v0

那10余2呢?
BradyShine-avatar

BradyShine

你能贴一下代码吗 说了半天我都没明白你干了啥
dea_dy-avatar

dea_dy

[quote][pid=497160966,25748686,1]Reply[/pid] Post by [uid=43038930]史塔克233[/uid] (2021-03-02 21:51):

你能贴一下代码吗 说了半天我都没明白你干了啥[/quote][img]https://img.nga.178.com/attachments/mon_202103/02/-7Q16r-hsvuK14T3cSsg-gk.jpg.medium.jpg[/img]
其实是在研究shader graph,看着实例做了一下,前面都明白,取uv除以两个向量倒数的余数,但是我以为这样算出来是0,但是却显示得出的数乘以向量结果为1,也就是说余数不为0,就卡这里了,研究了一阵子才发现我把余数算错了。
dea_dy-avatar

dea_dy

[quote][pid=497159331,25748686,1]Reply[/pid] Post by [uid=42666049]dachr[/uid] (2021-03-02 21:42):

余数可能是0.19999999999999996[/quote]为什么不是0?
kurly1404-avatar

kurly1404

[quote][pid=497165316,25748686,1]Reply[/pid] Post by [uid=1543367]skydmusf[/uid] (2021-03-02 22:13):

为什么不是0?[/quote]简单说,因为0.2不是0.2,所以不是0。(误[s:ac:哭笑]

你可以看看IEEE浮点数表示法,0.2应该是0.20000000000000001,那余数自然是0.19999999999999996

你那边具体用的精度我也不确定,反正大概是这个意思(也可能是4楼那种精度)
Platical-avatar

Platical

[s:ac:汗]没看懂,取余的时候有小数不是会报错非法操作么(cpp的话)
dea_dy-avatar

dea_dy

[quote][pid=497169679,25748686,1]Reply[/pid] Post by [uid=60162893]一桶毒奶[/uid] (2021-03-02 22:36):

[s:ac:汗]没看懂,取余的时候有小数不是会报错非法操作么(cpp的话)[/quote]没那么复杂,我可能表述有问题,其实就是想问为什么不是0,而是0.2
dea_dy-avatar

dea_dy

[quote][pid=497169221,25748686,1]Reply[/pid] Post by [uid=42666049]dachr[/uid] (2021-03-02 22:34):

简单说,因为0.2不是0.2,所以不是0。(误[s:ac:哭笑]

你可以看看IEEE浮点数表示法,0.2应该是0.20000000000000001,那余数自然是0.19999999999999996

你那边具体用的精度我也不确定,反正大概是这个意思(也可能是4楼那种精度)[/quote]大概明白了[s:ac:哭笑]