Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: jkoe am 20.06.12 - 15:19:31

Titel: Probleme mit der mod-Funktion
Beitrag von: jkoe am 20.06.12 - 15:19:31
Hallo,

bei einer Berechnung für einen Kunden ist die verwendung eines Modulowertes vorgeschrieben.

das Problem ist die Größe des Dividenden : 21-stellige Zahl.
die Modfunktion bringt einen Fehler, sobald die die Stellen >17 sind.

wenn ich die die Modfunktion nachbilde, wandelt Notes den Wert immer in die 123e21 -Darstellung um und Funktionen wie z.B. fix greifen nicht.

Grundsätzlich sieht die Funktion in etwa so aus:

    ModWert = Wert - (fix(Wert/33)) * 33

Wenn man die Formel in einzelne Schritte aufteilt, zeigt sich, das fix nicht greift bzw. der Gegentest mit fraction ergibt in diesem Bereich  0.

Zahlen in dieser Größenordnung scheinen durch die Umwandlung nicht mehr wie erwartet verarbeitet zu werden.

Als Formate habe ich mit dbl und variant getestet, alle anderen sind vom Wertebreich zu klein.

Vielleicht hat jemangd eine Idee, wo ich ansetzen könnte.

Danke

Jo
Titel: Re: Probleme mit der mod-Funktion
Beitrag von: umi am 20.06.12 - 15:31:35
Ich denke da wirst Du mit LS nicht weiter kommen.

Da würde ich jetzt den Umweg über JAVA gehen. Die hat sicher irgendwelche Bibliotheken um auch mit Grossen Zahlen zu arbeiten.

LS2J ist da sicher eine Möglichkeit
Titel: Re: Probleme mit der mod-Funktion
Beitrag von: Fineas am 20.06.12 - 15:33:53
Vielleicht hast Du noch etwas mehr Infos:

Wozu braucht man eine 21-stellige Zahl mit Modulo? Und Wieviele Stellen hat der Operator für gewöhnlich?

Vielleicht läßt sich das Ziel auf einem eleganteren Weg erreichen ...

Gruß, Heiko
Titel: Re: Probleme mit der mod-Funktion
Beitrag von: jkoe am 20.06.12 - 15:44:06
@fineas:

Die Stelligkeiten ergaben sich aus der Kombination mehrerer Eingabewerte und sind nicht änderbar.
der Modulo-Wert ist Bestandteil einer Berechnung für eine Prüfziffer.

@umi:
Danke für die Idee, ich mache mich mal auf die Suche.

Jo
Titel: Re: Probleme mit der mod-Funktion
Beitrag von: pram am 20.06.12 - 17:55:19
Code
	'/**
	' * Ermöglicht eine Modulo-Operation auf sehr große Zahlen, welche nicht mit den Standard LotusScript 
	' * Datentypen für numerische Werte durchgeführt werden kann (maximale LS Zahlengröße = 2^64 (4 Byte))
	' * @see <a href="http://www.devx.com/tips/Tip/39012">Finding Modulos of a very large number</a>
	' */
	Public Function bigModulo(ByVal bigNumberStr As String, modulo As Long) As Long
		Dim a As long
		Do While Len(bigNumberStr) > 9 ' 9-stellige Zahlen unproblematisch
			a	= Val(Left$(bigNumberStr,	9))
			If Abs(a) < Abs(modulo) Then Error 6
			bigNumberStr	= CStr(a Mod modulo) & Mid$(bigNumberStr,	10)
		Loop
		bigModulo = Val(bigNumberStr) Mod modulo
	End Function
HTH
Roland
Titel: Re: Probleme mit der mod-Funktion
Beitrag von: jkoe am 02.07.12 - 13:46:23
@pram

Hallo Roland, vielen Dank für die kurzfristige Lösung, das Script funktioniert wie es soll

Jo