LINUX.ORG.RU

как на tcl функцию вызвать??


0

0

есть функция вида

proc mini_sun jd {
        # Time in julian centuries:
        set t [expr ($jd-2451545.0)/36525.0]
        set p2 6.283185307;     set coseps 0.91748; set sineps 0.39778
        set m [expr $p2 * [frac [expr 0.993133 + 99.997361 * $t]]]
        set dl [expr 6893.0 * sin($m) + 72.0*sin(2*$m)]
        set l [expr $p2 * [frac [expr 0.7859453 + $m/$p2 + (6191.2*$t+$dl)/1296.e3]]]
        set sl [expr sin($l)]
        set x [expr cos($l)]; set y [expr $coseps*$sl]; set z [expr $sineps*$sl]
        set rho [expr sqrt(1.0-$z*$z)]
        set sundec [expr (360.0/$p2)*atan($z/$rho)]
        set sunra [expr (48./$p2)*atan($y/($x+$rho))]
        if {$sunra<0} {set sunra [expr $sunra+24.0]}
        return [list $sunra $sundec]
}

как выдать на печать что оно вычисляет??

Спасибо!

☆☆

Если я правильно тебя понял, то:

puts [mini_sun 120]

Кстати, set t [expr ($jd-2451545.0)/36525.0] лучше переписать так:

set t [ expr { ($jd-2451545.0)/36525.0 } ]

что бы выражение интерпретировалось после вызова expr, иначе потеряешь точность.  


kosmonavt
()
Ответ на: комментарий от kosmonavt

#!/bin/sh
# the next line restarts using tclsh\
exec tclsh "$0" "$@"
puts stdout "xxx\n"
                                                                                                          
proc mini_sun jd {
# Time in julian centuries:
  set t [expr { ($jd-2451545.0)/36525.0 }]
  set p2 6.283185307;     set coseps 0.91748; set sineps 0.39778
  set m [expr $p2 * [frac [expr 0.993133 + 99.997361 * $t]]]
  set dl [expr 6893.0 * sin($m) + 72.0*sin(2*$m)]
  set l [expr $p2 * [frac [expr 0.7859453 + $m/$p2 + (6191.2*$t+$dl)/1296.e3]]]
  set sl [expr sin($l)]
  set x [expr cos($l)]; set y [expr $coseps*$sl]; set z [expr $sineps*$sl]
  set rho [expr sqrt(1.0-$z*$z)]
  set sundec [expr (360.0/$p2)*atan($z/$rho)]
  set sunra [expr (48./$p2)*atan($y/($x+$rho))]
  if {$sunra<0} {set sunra [expr $sunra+24.0]}
  puts "$sunra $sundec XXX\n"
#  return [list $sunra $sundec]
}
puts [mini_sun 1]

[vilfred@observ vilfred]$ ./x.tcl
xxx
 
invalid command name "frac"
    while executing
"frac [expr 0.993133 + 99.997361 * $t"
    (procedure "mini_sun" line 5)
    invoked from within
"mini_sun 1"
    invoked from within
"puts [mini_sun 1]"
    (file "./x.tcl" line 22)
[vilfred@observ vilfred]$

:(

vilfred ☆☆
() автор топика
Ответ на: комментарий от kosmonavt

PS.

в $jd может храниться двоичное значение.
Если написать 

expr ($jd-2451545.0)/36525.0 ,

то tcl выполнит преобразование $jd в строку какой-нибудь
сишной фонкцией, sprintf например, где произойдет округление.

Если написать же написать

expr { ($jd-2451545.0)/36525.0 }

то подстановки $jd не будет и встроенная функция expr сама выполнит
анализ своих аргументов.

kosmonavt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.