1
21
1.0是唯一可能出错的情况,因此请单独处理该情况:
此外,为了避免舍入错误导致的错误行为(例如f=1.0000001),可能需要强制f为0<=f<=1。
替代安全解决方案:
或
|
2
7
为什么不试试
摆脱特殊情况
|
3
7
我总是这样
无需测试(1的特殊情况)和/或夹持其他答案。对于您来说,这是否是一个理想的答案取决于您的目标是尽可能地匹配输入值[我的公式],还是将每个组件划分为256个相等的间隔[其他公式]。 我公式的可能缺点是0和255区间的宽度只有其他区间的一半。经过多年的使用,我还没有看到任何不良的视觉证据。相反,我发现最好在输入非常接近它之前不要达到任何极端——但这是一个品味问题。
可能的好处是
相对的
R-G-B分量的值(稍微)更精确,用于更大范围的输入值。
实际上,或者
另一种评估方法
将0..255整数值转换为0.0..1.0范围内等距值的公式为:
朝这个方向走,就不存在是否使用的问题。
了解
图使用
这个
如果你掌握了这些图表,你就会明白我为什么喜欢
索赔
如果你使用
最容易测量的方法是从float开始,转到byte,然后返回float。要进行简单分析,请使用2位“0..3”图。
从大量的浮点值开始,平均分布在0.0到1.0之间。
往返行程将所有这些值分组到
如果您使用
图表使用
避免这种增加的错误的唯一方法是在从字节到浮点转换时使用一些不同的公式。如果你坚信
但是现在您将很难防御这样的情况,即您采用了等间距的字节值,并将它们转换为非等间距的浮点值。
如果您使用的值不是
|
4
1
接受的解决方案在比较float时失败,因为它是整数。 这个代码很好用:
如果没有夹子:
或者对于完整的RGB:
|
5
0
我相信正确的是地板(F*256),不是圆形的。这将把间隔0..1映射到正好256个相等长度的区域。 [编辑]特殊情况下选择256。 |
6
0
值<1被精确转换。 在转换后,介于255和256之间的值在转换为字节时会被转换为255。
使用
|
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 6 年前 |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 6 年前 |
Guillermo Gutiérrez · STR转换是如何工作的? 6 年前 |
RudziankoÅ · 合并排序数组算法 6 年前 |
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
hippietrail · 确定浮点数中前导零的数量 7 年前 |