|
 |
|

11.01.2013, 11:15
|
|
Erfahrener Benutzer
|
|
Registriert seit: 18.12.2008
Ort: Landkreis Ludwigsburg
Beiträge: 1.002
|
|
Zitat von enertegus
Was spricht gegen:
epc Code:
s=Wert*convert(pow(2f32,convert(Shifter),0f32),0u64)
|
Wenn es denn korrekt funktioniert spricht dagegen nur noch der unnötig hohe Rechenaufwand verglichen mit einem nativ implementierten Shift - ob das im praktischen Betrieb spürbar wird, kann ich aber nicht abschätzen.
Es stellt sich mir momentan halt noch die Frage, ob der von pow() gelieferte f32-Wert auch für alle in Frage kommenden Exponenten (0..63) ein hinreichend genaues Ergebnis liefert, das nach Konvertierung in ein u64 auch noch genau das Bitmuster ergibt, das es theoretisch ergeben muss. Hat das schon jemand mal prüfen können?
Zitat von enertegus
und dann halt schick verpacken z.b. in ein Makro
ShiftLinks(Wert,Shifter)
usw..
|
Klar, das ist dann die Kür und dann auch sicher kein wirkliches Problem mehr.
__________________
Tessi
|

11.01.2013, 11:24
|
 |
Erfahrener Benutzer
|
|
Registriert seit: 25.04.2009
Ort: Forchheim
Beiträge: 4.453
|
|
Zitat von Tessi
Es stellt sich mir momentan halt noch die Frage, ob der von pow() gelieferte f32-Wert auch für alle in Frage kommenden Exponenten (0..63) ein hinreichend genaues Ergebnis liefert, das nach Konvertierung in ein u64 auch noch genau das Bitmuster ergibt, das es theoretisch ergeben muss.
|
Wenn Du einen 32 Bit Rechner hast, kannst Du da ausprobieren. Ich wage die Behauptung, das wird stimmen.
Nicht verwechseln f16: Ungenau und zum Rechnen kaum geeignet, f32: wie bei jedem "normalen" 32 Bit PC.
|

19.01.2013, 23:23
|
 |
Benutzer
|
|
Registriert seit: 08.07.2010
Ort: Leinburg
Beiträge: 46
|
|
Hallo,
wollte mich noch abschliessend melden - habe das ganze jetzt fertig:
epc Code:
//*************************************************************************** //* WE_Ostertag //*************************************************************************** //* Bestimmung des Ostersonntag => Berechnung der bewegl. Feiertage //* moeglich //* Jahr muss 4-Stellig vorliegen und als s32 definiert sein !! //*************************************************************************** :begin WE_Ostertag ( jahr, ostern ) :var dd@ :var cc@ :var jj@ :var ee@ dd@ = MOD( MOD(jj@,19s32) * 19s32 + 24s32, 30s32); if dd@ > 27s32 then dd@ = dd@ -1s32 endif; ee@ = convert(FLOOR( convert(jj@, 1f16 ) *5f16/4f16),1s32 )+ dd@ + 1s32; cc@ = MOD( ee@, 7s32 ); ostern^Tag = 28s32 + dd@ - cc@; /* Ostertag */; if ostern^Tag <= 31s32 then ostern^Mon = 3s32 endif if ostern^Tag > 31s32 then { /* Ostern im April */; ostern^Tag = ostern^Tag - 31s32; ostern^Mon = 4s32 } endif :return convert( ostern^Tag, $$ ) + $.$ + convert( ostern^Mon, $$ ) + $.$ :end
den daraus abgeleiteten Ostertag nehme ich dann und berechnen damit die
Distanz in Tagen zum Jahr 1970 ( ähnlich Unixtime ) und davon abgeleitet die beweglichen Feiertage ...
Zur Vereinfachung habe ich hierzu 2 Makro´s Datwert und Datwert2Date.
Danke nochmals an alle - wer die restlichen Makros haben möchte => bitte PN
Gruss Wolfgang
FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
__________________
WolfgangFB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
|

20.01.2013, 01:41
|
 |
Erfahrener Benutzer
|
|
Registriert seit: 27.09.2008
Beiträge: 4.633
|
|
Hoi
Ich versteh' den Code nicht. Die Eingangsvariablen "jahr" und "ostern" kommen im code scheinbar nicht vor?
"jahr" ist mir klar, aber was ist "ostern"?
__________________
Grüsse Bodo Nach bst. Wissen, ohne Gewähr; Fragen gehören ins Forum, und nicht in mein Postfach; EibPC-Fan; Wiregate-Fan; Alix1d mit eibd, linknx, knxweb, 30x 1-Wire, mjpg_streamer, e-mail, sms, growl-notif., CUL; Dreambox8000HD stream VLC's, TV-Browser start-record; Fritzbox 7270, voip; HP ProCurve 1810G 24 GE; Zotac ZBOX HD-ND22 mit SU2300 und Ubuntu 11.10 FullHD; MusicPal; SqueezeboxBoom; NEU Russound C5; iPhone 5 IOS6.1 JB PHP Lighty
Geändert von Bodo (20.01.2013 um 01:46 Uhr)
|

20.01.2013, 13:08
|
 |
Benutzer
|
|
Registriert seit: 08.07.2010
Ort: Leinburg
Beiträge: 46
|
|
Hallo Bodo,
die Variablen jahr und ostern sind Übergabevariablen und vorab gesetzt. Nachstehend der Aufruf im Programm. Die GA '3/0/8' trägt das aktuelle Kalenderjahr - über c_KalOster erhalte ich die Rueckgabe
von Tag und Monat ...
epc Code:
// Jahreswechsel => bewegliche Feiertage neu berechnen if change('3/0/8's32 ) or systemstart() then { c_KalJahr = '3/0/8's32; /* aktuelles Jahr, Übergabeparameter */; WE_Ostertag( c_KalJahr, c_KalOster ); /* Berechnung OsterTag */; /* AnzTage bis Ostern */; c_OsterDay = WE_Datwert( c_KalJahr, c_KalOsterMon, c_KalOsterTag ); /* Berechnung der bewegl. feiertage */; c_AschermittwochDay = c_OsterDay - 46s32; c_FaschingsDay = c_AschermittwochDay - 1s32; c_OstermontagDay = c_OsterDay + 1s32; c_HimmelfahrtDay = c_OsterDay + 39s32; c_PfingstDay = c_OsterDay + 49s32; c_PfingstmontagDay = c_PfingstDay + 1s32; c_FronleichDay = c_OsterDay + 60s32; /* Bestimmung der DatumStrings */; WE_DatwertToDate( c_Ostern, c_OsterDay ); WE_DatwertToDate( c_Ostermontag, c_OstermontagDay ); WE_DatwertToDate( c_Aschermittwoch, c_AschermittwochDay ); WE_DatwertToDate( c_Fasching, c_FaschingsDay ); WE_DatwertToDate( c_Himmelfahrt, c_HimmelfahrtDay ); WE_DatwertToDate( c_Pfingsten, c_PfingstDay ); WE_DatwertToDate( c_Pfingstmontag, c_PfingstmontagDay ); WE_DatwertToDate( c_Fronleich, c_FronleichDay ) } endif
Mir ist klar, fuer die Übergabe und Rueckgabe der Werte gibt es viele Wege ;-)
Ich wollte hier im Kern den geprüften und funktionierenden Code fuer die Osterberechnung zeigen ...
FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
__________________
WolfgangFB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
|

20.01.2013, 15:08
|
 |
Erfahrener Benutzer
|
|
Registriert seit: 27.09.2008
Beiträge: 4.633
|
|
Hoi
Und was ist / woher kommt "c_KalOster" ?
Dann geb' ich schon ruh'.
__________________
Grüsse Bodo Nach bst. Wissen, ohne Gewähr; Fragen gehören ins Forum, und nicht in mein Postfach; EibPC-Fan; Wiregate-Fan; Alix1d mit eibd, linknx, knxweb, 30x 1-Wire, mjpg_streamer, e-mail, sms, growl-notif., CUL; Dreambox8000HD stream VLC's, TV-Browser start-record; Fritzbox 7270, voip; HP ProCurve 1810G 24 GE; Zotac ZBOX HD-ND22 mit SU2300 und Ubuntu 11.10 FullHD; MusicPal; SqueezeboxBoom; NEU Russound C5; iPhone 5 IOS6.1 JB PHP Lighty
|

20.01.2013, 15:48
|
 |
Benutzer
|
|
Registriert seit: 08.07.2010
Ort: Leinburg
Beiträge: 46
|
|
Hallo Bodo,
kein Problem: c_KalOster ergibt nur den Rueckgabewert und wird durch
das Makro definiert. Ich kann somit zugreifen auf:
c_KalOsterMon ( = Monat des Ostertages ) und c_KalOsterTag ( = Tag von Ostern ) zugreifen. Als Return erhalte ich auch noch einen String im Format DD.MM. den ich aktuell aber nicht verwende.
Gruss
FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
__________________
WolfgangFB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
|

20.01.2013, 16:05
|
 |
Erfahrener Benutzer
|
|
Registriert seit: 27.09.2008
Beiträge: 4.633
|
|
Hoi
Ah soo.
epc Code:
:begin WE_Ostertag ( jahr, ostern )
bzw.
epc Code:
c_KalJahr = '3/0/8's32; /* aktuelles Jahr, Übergabeparameter */; WE_Ostertag( c_KalJahr, c_KalOster );
c_KalJahr wird an die "Funktion" übergeben und c_KalOster ist das Ergebnis.
Ich dachte es geht so:
ostern = WE_Ostertag (Jahr);
__________________
Grüsse Bodo Nach bst. Wissen, ohne Gewähr; Fragen gehören ins Forum, und nicht in mein Postfach; EibPC-Fan; Wiregate-Fan; Alix1d mit eibd, linknx, knxweb, 30x 1-Wire, mjpg_streamer, e-mail, sms, growl-notif., CUL; Dreambox8000HD stream VLC's, TV-Browser start-record; Fritzbox 7270, voip; HP ProCurve 1810G 24 GE; Zotac ZBOX HD-ND22 mit SU2300 und Ubuntu 11.10 FullHD; MusicPal; SqueezeboxBoom; NEU Russound C5; iPhone 5 IOS6.1 JB PHP Lighty
|

14.03.2013, 18:09
|
|
Benutzer
|
|
Registriert seit: 30.05.2010
Ort: Matzendorf
Beiträge: 195
|
|
Ich bin etwas verwirrt, könnte mir jemand bitte ein Beispiel geben, wie und wofür ihr es verwendet?
Lasst ihr euch den Feiertag in der Visu darstellen?
Um es zu verwenden, braucht man also das Makro und den Aufruf im EIBPC?
Makro
Code:
- //***************************************************************************
- //* WE_Ostertag
- //***************************************************************************
- //* Bestimmung des Ostersonntag => Berechnung der bewegl. Feiertage
- //* moeglich
- //* Jahr muss 4-Stellig vorliegen und als s32 definiert sein !!
- //***************************************************************************
- :begin WE_Ostertag ( jahr, ostern )
- :var dd@
- :var cc@
- :var jj@
- :var ee@
- dd@ = MOD( MOD(jj@,19s32) * 19s32 + 24s32, 30s32);
- if dd@ > 27s32 then dd@ = dd@ -1s32 endif;
- ee@ = convert(FLOOR( convert(jj@, 1f16 ) *5f16/4f16),1s32 )+ dd@ + 1s32;
- cc@ = MOD( ee@, 7s32 );
- ostern^Tag = 28s32 + dd@ - cc@; /* Ostertag */;
- if ostern^Tag <= 31s32 then ostern^Mon = 3s32 endif
- if ostern^Tag > 31s32 then { /* Ostern im April */;
- ostern^Tag = ostern^Tag - 31s32;
- ostern^Mon = 4s32
- } endif
- :return convert( ostern^Tag, $$ ) + $.$ + convert( ostern^Mon, $$ ) + $.$
- :end
EIBPC
Code:
- // Jahreswechsel => bewegliche Feiertage neu berechnen
- if change('3/0/8's32 ) or systemstart() then {
- c_KalJahr = '3/0/8's32; /* aktuelles Jahr, Übergabeparameter */;
- WE_Ostertag( c_KalJahr, c_KalOster ); /* Berechnung OsterTag */;
- /* AnzTage bis Ostern */;
- c_OsterDay = WE_Datwert( c_KalJahr, c_KalOsterMon, c_KalOsterTag );
- /* Berechnung der bewegl. feiertage */;
- c_AschermittwochDay = c_OsterDay - 46s32;
- c_FaschingsDay = c_AschermittwochDay - 1s32;
- c_OstermontagDay = c_OsterDay + 1s32;
- c_HimmelfahrtDay = c_OsterDay + 39s32;
- c_PfingstDay = c_OsterDay + 49s32;
- c_PfingstmontagDay = c_PfingstDay + 1s32;
- c_FronleichDay = c_OsterDay + 60s32;
- /* Bestimmung der DatumStrings */;
- WE_DatwertToDate( c_Ostern, c_OsterDay );
- WE_DatwertToDate( c_Ostermontag, c_OstermontagDay );
- WE_DatwertToDate( c_Aschermittwoch, c_AschermittwochDay );
- WE_DatwertToDate( c_Fasching, c_FaschingsDay );
- WE_DatwertToDate( c_Himmelfahrt, c_HimmelfahrtDay );
- WE_DatwertToDate( c_Pfingsten, c_PfingstDay );
- WE_DatwertToDate( c_Pfingstmontag, c_PfingstmontagDay );
- WE_DatwertToDate( c_Fronleich, c_FronleichDay )
- } endif
Könnte mir hier Bitte jemand Klarheit schaffen!!?? 
__________________
MfG MrKnx
|

15.03.2013, 01:51
|
 |
Benutzer
|
|
Registriert seit: 08.07.2010
Ort: Leinburg
Beiträge: 46
|
|
Ich nütze es für das Öffnen der Jalousien morgens: werktags: 7:00 / Feiertags: 8:00
Gruss Wolfgang
__________________
WolfgangFB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:43 Uhr.
|