代码之家  ›  专栏  ›  技术社区  ›  mafu

给定一个整数M,那么(int)C<M的最大浮点数C是多少?

  •  -1
  • mafu  · 技术社区  · 7 年前

    我正在将大量浮点映射到int。所有浮点值都在[0;1]范围内,整数应该在[0,M)范围内,其中 M = 1 << k ,例如256。

    我关心的是均匀分布,所以我不能用 round (f * 255) ,使第一个和桶的容量减半。

    太天真了,你会这样做:

    int i = (int)(f * M);
    

    由于f=1.0时这一点失败(导致i=M而不是M-1),我们需要单独讨论:

    int i = min (M - 1, (int)(f * M));
    

    相反,我只想做一些

    int i = (int)(f * C);
    

    其中C是一个小于M的浮点常数,它保证了严格的不等式 (int)(f * C) < M 对于范围[0;1]内的所有f。

    当然,我们可以简单地设置 C = M - 0.001f

    给定一个整数M>0,那么最大的浮点C是多少 (int)C < M ?

    1 回复  |  直到 7 年前
        1
  •  4
  •   eerorika    7 年前

    std::nextafterf(M, 0) .