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

问题描述 投票:0回答:1

我正在将大量浮动映射到整数。所有浮点数都在[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的浮点常数,它保证了范围[0; 1]中所有f的严格不等式(int)(f * C) < M

当然,我们可以简单地设置C = M - 0.001f并完成它。但我们假设我们想以正确的方式做到这一点。究竟什么是C,如果涉及任意整数宽度而不仅仅是8位?换一种说法:

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

c++ floating-point
1个回答
4
投票

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

这将是std::nextafterf(M, 0)

© www.soinside.com 2019 - 2024. All rights reserved.