我正在C语言中实现表示以下内容的伪代码:

delay = ROUND(64*(floatDelay - intDelay))
where intDelay = (int) floatDelay

floatDelay将始终为正。使用math.h中的round函数是否有优势:
#inlcude <math.h>
delay=(int) round(64*(floatDelay-intDelay));

或者我可以使用:
delay=(int)(64*(floatDelay - intDelay) + 0.5))

最佳答案

处理浮点数时,应始终使用适当的数学库。浮点数可能只是非常接近实际值,这可能会引起怪异。

例如,5f可能近似为4.9999999 ...,如果尝试直接将其强制转换为int,它将被截断为4。

要深入了解原因,您应该在Wikipedia上查找浮点数。简而言之,它不是像int那样将数字存储为一系列连续的位,而是将其存储为两部分。有一个“分数”和一个指数,其中浮点数的最终值为分数*(基数^指数)。

08-19 16:12