gpt4 book ai didi

ios - 为什么在 glsl 中变化的 float 相等性测试失败?

转载 作者:可可西里 更新时间:2023-11-01 03:39:21 28 4
gpt4 key购买 nike

如果我的着色器程序中有一个可变的 float :

varying highp float someFloat;

在顶点着色器中,我将它设置为一些东西。

someFloat = 1.0;

为什么在我的片段着色器中这个比较似乎返回 false?

someFloat == 1.0 // false

但这会返回 true 吗?

someFloat > .0 // true

在 iPad mini 中测试 openGL ES。

最佳答案

它发生在任何 IEEE 754 float 上。这是因为浮点表示的性质。任何使用 IEEE 754 格式的语言都会遇到同样的问题。

由于 1.0 在浮点系统中可能不完全表示为 1.000000000... ,因此使用 == 。 float 应始终与 epsilon 值进行比较。

由于浮点计算涉及一些不确定性,我们可以通过查看两个数字是否彼此“接近”来尝试考虑到这一点。如果您决定——基于错误分析、测试或大胆猜测——结果应始终在预期结果的 0.00001 以内,那么您可以将比较更改为:

if (fabs(someFloat - 1.0)) < 0.00001)

最大误差值通常称为 epsilon。

也许你应该阅读 What Every Computer Scientist Should Know About Floating-Point Arithmetic

关于ios - 为什么在 glsl 中变化的 float 相等性测试失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17506628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com