Bläddra i källkod

с математикой затык, в го нет вычисления мантиссы

kpmy 10 år sedan
förälder
incheckning
d807948f8f
2 ändrade filer med 28 tillägg och 1 borttagningar
  1. 22 1
      rt2/rules/call.go
  2. 6 0
      rt2/scope/modern/val.go

+ 22 - 1
rt2/rules/call.go

@@ -14,6 +14,8 @@ import (
 	rtm "fw/rt2/module"
 	"fw/rt2/scope"
 	"fw/utils"
+	"math"
+	"math/big"
 	"reflect"
 	"ypk/assert"
 	"ypk/halt"
@@ -115,9 +117,28 @@ func go_process(f frame.Frame, par node.Node) (frame.Sequence, frame.WAIT) {
 }
 
 func go_math(f frame.Frame, par node.Node) (frame.Sequence, frame.WAIT) {
+	const (
+		LN   = 1.0
+		MANT = 2.0
+		EXP  = 3.0
+	)
 	assert.For(par != nil, 20)
+	sm := f.Domain().Discover(context.SCOPE).(scope.Manager)
+	res := math.NaN()
 	switch p := par.(type) {
-
+	case node.VariableNode:
+		val := sm.Select(p.Object().Adr())
+		rv, ok := scope.GoTypeFrom(val).([]float64)
+		assert.For(ok && (len(rv) > 1), 100, rv)
+		switch rv[0] {
+		case LN:
+			res = math.Log(rv[1])
+		case MANT:
+			tmp := big.NewRat(1, 1)
+			tmp.SetFloat64(rv[1])
+			panic(0)
+		}
+		fmt.Println(rv)
 	default:
 		halt.As(100, reflect.TypeOf(p))
 	}

+ 6 - 0
rt2/scope/modern/val.go

@@ -631,6 +631,12 @@ func gfrom(v scope.Value) interface{} {
 			} else {
 				return ""
 			}
+		case object.REAL:
+			ret := make([]float64, 0)
+			for i := 0; i < len(n.val) && n.val[i] != nil; i++ {
+				ret = append(ret, float64(n.val[i].(REAL)))
+			}
+			return ret
 		default:
 			halt.As(100, n.link.Complex().(object.ArrayType).Base())
 		}