- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当 Sympy 生成 C 代码时,
有没有办法对表达式中的 pow(或 powf)出现强制执行 CSE 优化?
例如,这个代码片段
c, s = symbols('c s')
myexpr = c**6/1800 - c**5/100 - 0.00833333333333333*c**4*s**2 + 19*c**4/200 + 0.1*c**3*s**2 - 9*c**3/20 + c**2*s**4/120 - 0.57*c**2*s**2 + 43*c**2/40 - c*s**4/20 + 1.35*c*s**2 + 23*c/50 - 0.000555555555555556*s**6 + 19*s**4/200 - 1.075*s**2 - 2107/1800
import sympy
from sympy.codegen.ast import real, float64
sub_exprs,final_expr = sympy.cse([myexpr])
for var,expr in sub_exprs : print "const real", printing.ccode(expr, standard='C99', assign_to=var, type_aliases={real: float64})
print "return ",printing.ccode(final_expr[0], standard='C99', type_aliases={real: float64}),";"
const real x0 = pow(c, 2);
const real x1 = pow(c, 3);
const real x2 = pow(c, 4);
const real x3 = pow(s, 2);
const real x4 = pow(s, 4);
return (1.0/1800.0)*pow(c, 6) - 1.0/100.0*pow(c, 5) + 1.3500000000000001*c*x3 - 1.0/20.0*c*x4 + (23.0/50.0)*c - 0.00055555555555555599*pow(s, 6) - 0.56999999999999995*x0*x3 + (1.0/120.0)*x0*x4 + (43.0/40.0)*x0 + 0.10000000000000001*x1*x3 - 9.0/20.0*x1 - 0.0083333333333333297*x2*x3 + (19.0/200.0)*x2 - 1.075*x3 + (19.0/200.0)*x4 - 2107.0/1800.0 ;
最佳答案
sympy 中的 CSE 例程并不完美(改进的 CSE 是 listed 作为改进的领域),例如:
>>> sympy.cse([x**4, x**3*y])
([], [x**4, x**3*y])
pow
在打印机或之前打印机已
discussed一段时间后,现在有一个
create_expand_pow优化可以帮助一些:
>>> expand_opt = create_expand_pow_optimization(3)
>>> expand_opt(x**5 + x**3)
x**5 + x*x*x
关于同情 CSE : avoid pow/powf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007192/
我正在尝试在 rtems 应用程序中使用 powf 函数。当我调用 powf(a,b); 时在 Init() 函数中,它编译正常。但是当我在其他函数中调用 powf 时,编译器会给出“对 powf 的
当 Sympy 生成 C 代码时, 有没有办法对表达式中的 pow(或 powf)出现强制执行 CSE 优化? 例如,这个代码片段 c, s = symbols('c s') myexpr = c**
我在使用 XCode 编译库时遇到错误: 'powf' is not a member of 'std' 包括在内。 谁能给我解释一下哪里出了问题? 最佳答案 直到 C++11,powf 只是一个 M
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我编写了这段 C 代码来计算 3 的平方值。 #include #include int main( void ) { float a; a = powf( 3, 2 );
Java 中是否存在与 Objective-C 等价的函数 float powf(float, float)? 谢谢。 最佳答案 有两个选项 double d = Math.pow(a, b); 或者
我正在试验 LLVM 的 JIT 功能,在调用 powf 时,我观察到如果我简单地为它添加一个声明,调用 powf 就可以工作 declare float @powf(float, float)) 并
我相信其他 Fedora 28 用户会知道,该操作系统的 glibc 最近已更新为 glibc 2.27。在许多其他方面,2.27 添加了 logf() 和 powf() 的新实现。这导致我的应用程序
我是一名优秀的程序员,十分优秀!