c++ - 给定一个整数 M,满足 (int)C < M 的最大浮点数 C 是多少?
问题描述
我正在将大量浮点数映射到整数。所有浮点数都在 [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
并完成它。但是让我们假设我们想以正确的方式来做。如果涉及任意整数宽度而不仅仅是 8 位,那么 C 到底是什么?换句话说:
给定一个整数 M > 0,最大的浮点数 C 是(int)C < M
多少?
解决方案
给定一个整数 M,满足 (int)C < M 的最大浮点数 C 是多少?
会的std::nextafterf(M, 0)
。
推荐阅读
- python - Tkinter 不可修改/可修改的文本小部件
- mysql - MySQL查询根据一个共同值对两个表中的一列求和并计算另一列?
- json.net - JsonConvert 反序列化 - 如何将 json 的某些部分的值作为字符串而不是反序列化
- yii2 - Yii2 - 从 CSV 文件导入多个用户
- string - 交换脚本。Н现在添加到所有行的末尾
- sql - SQL Oracle Managed Provider 与 SQLDeveloper 的不同查询结果
- java - 如何连续循环菜单直到选择退出选项,以及如果选择无效操作则重复菜单
- postgresql - 在 Postgresql AWS RDS 实例上的所有会话中获取缓冲区中的查询列表
- apache-kafka - CommitFailedException:提交无法完成,因为该组已经重新平衡并将分区分配给另一个成员
- jquery - 水平列表中的 jQuery UI 自动完成值