C++ 给定一个整数M,最大浮点数C是多少,使得(int)C<;M

C++ 给定一个整数M,最大浮点数C是多少,使得(int)C<;M,c++,floating-point,C++,Floating Point,我正在将大量浮点映射到整数。所有浮点数都在范围[0;1]内,整数应该在范围[0,M]内,M=1 给定一个整数M,使(int)C > /P>你是问C还是C++?它们是不同的语言,可能有不同的解决方案。我不知道如何解决你的问题,但是能帮助吗?为什么你认为你的截断方法(通过铸造到 int >代码>)会给你比Road()的更均匀的分布。ing会吗?无论哪种方式,您都必须处理这样一个事实,即可表示的float值在间隔的前半部分的密度是后半部分的两倍。如果您想要的范围是[0,M],那么为什么int i=(i

我正在将大量浮点映射到整数。所有浮点数都在范围[0;1]内,整数应该在范围[0,M]内,
M=1
给定一个整数M,使(int)C
它将是
std::nextafterf(M,0)

给定一个整数M,使(int)C
<>代码> STD::NEXTAFFTF(m,0)< /C> > /P>你是问C还是C++?它们是不同的语言,可能有不同的解决方案。我不知道如何解决你的问题,但是能帮助吗?为什么你认为你的截断方法(通过铸造到<代码> int >代码>)会给你比Road()的更均匀的分布。
ing会吗?无论哪种方式,您都必须处理这样一个事实,即可表示的
float
值在间隔的前半部分的密度是后半部分的两倍。如果您想要的范围是
[0,M]
,那么为什么
int i=(int)(f*M)对不起,打字。M被排除在外。你是在问C还是C++?他们是不同的语言,可能有不同的解决方案。我不知道如何解决你的问题,但是能帮上忙吗?为什么你认为你的截断方法(通过铸造到<代码> int >代码>)会给你比
ing会吗?无论哪种方式,您都必须处理这样一个事实,即可表示的
float
值在间隔的前半部分的密度是后半部分的两倍。如果您想要的范围是
[0,M]
,那么为什么
int i=(int)(f*M)
有问题吗?@NathanOliver抱歉,错别字.M被排除在外。是否保证将结果强制转换为int可以取整?@mafu是(接近零)。标准上说:
浮点类型的prvalue可以转换为整数类型的prvalue。转换会截断,也就是说,小数部分会被丢弃。
谢谢。我真的想得太多了,你展示了一种简洁而简单的方法。是否保证将结果转换为int可以取整?@mafu是的(接近零)。标准上说:
浮点类型的PR值可以转换为整数类型的PR值。转换会截断;也就是说,小数部分会被丢弃。
谢谢。我真的想得太多了,你展示了一种干净简单的方法。
int i = (int)(f * M);
int i = min (M - 1, (int)(f * M));
int i = (int)(f * C);