问题标签 [pow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 处理 glsl 中的未定义、NaN 或 Inf 值。思考数学错误
我仍然没有摆脱我的 glsl 着色器(GL 2.0)中的一些烦人的错误......我已经搜索了超过 3 周的这个问题的解决方案,但我没有得到任何解决方案。谷歌上有很多例子和解释,但没有一个真正有效。
首先,这是我的片段着色器代码。之后,我将解释究竟是什么问题:
有给出以下变量值,其中:
- pl_ 是点光值,
- dl_ 是方向光值,
- mat_diff 是材质的漫反射值,
- 还有 mat_spec、mat_elum、mat_shine 用于材质镜面反射、发光和光泽度,
- N = 正常,
- V = 视图向量到顶点,
- L = 光向量到顶点,
- R = 反射向量,
- D = 光距,
- DF = 混合光的距离因子,
- S = 计算的镜面反射系数,
- F = L,N 的点积
- 和 diff,计算出的漫反射/规格矢量的规格矢量和。
现在出现以下问题: Pointlights 本身运行完美。定向灯本身也运行完美。但是它们在一起不会很好地工作。我将解决这个问题:我最多有 4 个点光源和 4 个定向光源。为了测试,我使用了 4 个点光源和 1 个定向光源。
- 如果我注释掉定向灯的for循环计算,我得到以下结果:
- 如果我注释掉点光源的 for 循环,我会得到以下结果:
- 如果我启用了两个 for 循环,则会发生以下情况:
定向光似乎完全被忽略了。汽车仅由点灯照明。
所以,我发现:如果我改变 for 循环的顺序,点灯 -> 定向灯,而不是 dirlights -> 点灯,效果会交换:点灯被忽略,定向灯被计算。
我也发现,这个问题一定是:pow() 函数或除以零,但是:如果我注释掉以下代码行:
我可以得到以下结果:
-> 漫反射颜色通常为点光源和定向光源计算!
所以我想到了如何消除这个问题,因为我认为 0 power by 0 会导致数学错误。也除以零....如何避免未定义的值?
isnan() 或 isinf() 函数似乎在 android-glsl 中不存在。
安迪解决方案或提示我可以做得更好,这会奏效吗?如果它可以帮助一点点,我会很高兴任何答案。这让我很生气,因为 3 周。非常感谢帮手!:)
有关代码的更多信息: https ://github.com/Chrise55/Llama3D
克里斯
c++ - 为什么这个函数不超过值 2^31?
幂函数(用 C++ 编写)...
现在我做一些输出测试......
输出:
好吧,长期回落到 32 位大小(而不是保持为 64 位)似乎存在一些问题。我想知道为什么这不起作用,但如果我使用该long long
类型,一切正常。
一些额外的信息:
我正在使用 C++ 和编译器 MinGW
我正在运行 64 位操作系统(Windows 7)
更新:
你们真棒!从来没想过会发生这样的事情。
我刚刚检查了一些使用的任意 PDT sizeof
,这就是我发现的......
输出:
所以,它看起来像我的long
,int
都是 32 位大小的。更多玩弄表明 intmax_t 类型也是 64 位的。实际上,每个 PDT 的上限为 64 位,所以如果我需要表示一个 128 位整数,c++ 是否有一个内置类(类似于BigInteger
Java 中的东西)?
c - 当 powl() 存在时,sscanf() 导致链接失败
当我编译下面的精简程序时,我从链接器收到以下错误:
如果我用 注释掉该行sscanf()
,则编译成功,并且在功能减少的情况下程序可以正确运行。如果我改为注释掉包含的行,它也可以工作powl()
以下是版本:
相同的结果:
运行:
我究竟做错了什么?
c# - Math.Pow() 在 .NET Framework 中是如何实现的?
我一直在寻找一种有效的方法来计算 a b(比如a = 2
and b = 50
)。首先,我决定看一下Math.Pow()
函数的实现。但是在.NET Reflector中,我发现的只是:
Math.Pow()
当我调用函数时,我可以看到哪些资源在里面发生了什么?
c - gcc 和 math.h 的奇怪行为?
我一直在尝试构建一些使用数学函数的代码(例如pow
)。
math.h
-lm
包括在内,并且在构建期间使用该标志。
当像这样调用编译时(-lm
命令开头的标志),它失败了,说有一个未定义的引用pow
:
当-lm
标志放在命令的末尾时,它就起作用了!
这是正常的吗?
c - C中幂函数的未定义参考错误
可能重复:在 C未定义对floor 的引用
中使用 pow() 时出现问题
pow' and
我正在使用 gcc 4.6.1。
代码片段:
终端:
如果我将 x 替换为 2,那么它将以预期的方式执行。pow 函数不接受变量作为参数吗?
注意:我在源文件中包含了 stdio.h 和 math.h。
c++ - C++:具有两个常量的 pow() 优化
简单的问题:当编译器面临一个调用,比如说,带有两个常量(即来自宏的值)的 pow() 时,它是通过在编译时评估它来优化的,还是仍然在运行时计算?
例子:
谢谢!
编辑如果没有,有没有办法在编译时将宏的平方/立方体计算为另一个宏(就像我在上面尝试的那样)?
c - 替换非常慢的 pow() 函数
我们有一个 CFD 求解器,在运行模拟时,发现它在某些机器上运行异常缓慢,但在其他机器上却没有。使用 Intel VTune,发现以下行是问题(在 Fortran 中):
用 VTune 钻取,问题被追溯到call pow
装配线,当跟踪堆栈时,它显示它正在使用__slowpow()
. 经过一番搜索,这个页面出现了抱怨同样的事情。
在具有 libc 版本 2.12 的机器上,模拟耗时 18 秒。在具有 libc 版本 2.14 的机器上,模拟耗时 0 秒。
根据上述页面上的信息,当 base topow()
接近 1.0 时会出现问题。所以我们做了另一个简单的测试,我们在之前用任意数字缩放基数,pow()
然后除以pow()
调用之后的指数。这也将 libc 2.12 的运行时间从 18 秒降至 0 秒。
然而,把它放在我们做的所有代码中是不切实际的a**b
。如何替换pow()
libc 中的函数?例如,我希望call pow
Fortran 编译器生成的装配线调用pow()
我们编写的自定义函数来进行缩放,调用 libc pow()
,然后除以缩放。如何创建对编译器透明的中间层?
编辑
为了澄清,我们正在寻找类似(伪代码)的东西:
是否可以从 libc 加载pow
并在我们的自定义函数中重命名以避免命名冲突?如果customPow.o
文件可以pow
从 libc 重命名,如果其他事情仍然需要 libc 会发生什么?这会导致libcpow
中customPow.o
的命名冲突吗?pow
c++ - 来自 math.h 库的 pow() - 如何使用函数应用
所以我正在编写一些代码,需要将函数的返回值提高到一定的幂。我最近发现使用 '^' 运算符进行求幂是没有用的,因为在 C++ 中它实际上是一个 XOR 运算符或类似的东西。现在这是我要编写的代码:
现在谁能告诉我这是否正确?我将解释代码。正如你们都知道的那样,我已经声明了一个 int 变量答案,并将其初始化为任何名为“base”的变量的值,提升为作用于任何其他名为“power”的变量的 raiseTo() 函数的返回值。当我这样做时(并且我在 Visual C++ 2010 速成版中编辑和编译我的代码),在单词 'pow' 下出现一个红色破折号,并且出现错误消息:“多个重载函数 'pow' 的实例与参数匹配list"
有人可以帮我解决这个问题吗?你们能否也向我解释一下整个 pow() 函数是如何工作的,因为坦率地说 www.cplusplus.com 的引用有点令人困惑,因为我仍然只是一个初学者!
c++ - 使用递归将基数提高到其指数 - C++
我只是想编写一些代码,利用函数递归来提高基础。我知道递归不是在 C++ 中做事的最正确方法,但我只是想稍微探索一下这个概念。该程序要求用户提供一个基数和一个指数,然后控制台输出答案。这是我编写的程序:
有趣的是,当我运行这个程序时,它一直返回答案为“1”!有人可以帮我吗?