我有一个执行几十万次的过程:
proc ::TsaiWu { x_all_comp x_all_tens y_all_comp y_all_tens s_allow x_stress y_stress s_stress } {
set FX [ expr { 1 / $x_all_tens - 1 / $x_all_tens } ]
set FY [ expr { 1 / $y_all_tens - 1 / $y_all_tens } ]
set FXX [ expr { 1 / ( $x_all_tens * $x_all_comp ) } ]
set FYY [ expr { 1 / ( $y_all_tens * $y_all_comp ) } ]
set IXY [ expr { -0.5 * sqrt( ( $y_all_tens * $y_all_comp) / ( $x_all_tens * $x_all_comp) ) } ]
set FXY [ expr { $IXY / sqrt( $x_all_tens * $x_all_comp * $y_all_tens * $y_all_comp ) } ]
set FSS [ expr { 1 / pow($s_allow,2) } ]
set a [ expr { $FXX * pow($x_stress,2) + $FYY * pow($y_stress,2) + 2 * $FXY * $x_stress * $y_stress + $FSS * pow($s_stress,2) } ]
set b [ expr { $FX * $x_stress + $FY * $y_stress } ]
set TW [ expr { $a + $b } ]
set SR [ expr { ( -2 + sqrt( pow($b,2) + 4 * $a) ) / ( 2 * $a ) } ]
set result [ list $TW $SR ]
return $result
}
我必须加快速度吗?我在表达式中添加了大括号,这确实有很大帮助。将单个方程重写为两个(一个用于 TW,一个用于 SR)是否更快?然后我只需要调用 expr 两次。如果我用 C++ 编写这段代码并以某种方式在我的 tcl 脚本中使用会更快吗?sqrt 和 pow(x,0.5) 之间有速度差异吗?欢迎任何有关如何加快此过程 upp 的提示!在最终版本中,我将使用 upvar 或全局变量,因此我不必将结果作为列表副本移交(它会慢得多吗?)如果我不将这些行放在 proc 中,代码会运行得更快吗? itelv,并将其“内联”放置在需要的地方?据我所知,在 TCl 中 procs 更快...