C++Guns – RoboBlog blogging the bot

28.03.2013

Qt Source und kleine Perlen

Filed under: Allgemein — Tags: , , — Thomas @ 23:03

Ich habe in den letzten 3 Tagen viel Qt Source gelesen und da war schon viel Wirr und Krams dabei. Aber auch kleine Perlen wie diese Zeile in QRectF QPolygonF::boundingRect() const zeige

register const QPointF *pd = constData();
for (int i = 1; i < size(); ++i) { ++pd; }

Da kennt ein Performance-Fan das Keyword register. Ich war richtig überrascht und erfreut auch mal ein Stück optimierten Code zu finden.
Erklärung: das Keyword register sagt dem compiler, dass der Pointer bitte die ganze Zeit über in einem CPU Register bleiben soll. Die Registert sind ja die schnellsten Speicher die es in so einer CPU gibt, und da der Pointer in der nachfolgenden Schleife etliche mal benutzt wird, macht das auch Sinn.
Sogar das const keyword ist dabei. Das sagt dem Compiler, dass er diesen Pointer nicht in den Hauptspeicher zurück speicher muss, da er zu 100% nicht verändert worden ist. Und der Zugriff auf den Hauptspeicher ist im Vergleich zu dem Registert bestimmt 1000x langsamer.

++pd;
Selbst bei dieser recht unbedeuteten Zeile Code gibt es etwas zu sagen. Es gibt eine Menge Post im Internet die vermuten, dass ++i schneller sei als i++ [1] [2]. Aber der Compiler wird das schon optimieren. Jedenfalls weiß der Autor von QPolygonF::boundingRect() das, und ich finde es schön :)

[1] http://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and-i
[2] http://stackoverflow.com/questions/24886/is-there-a-performance-difference-between-i-and-i-in-c

26.03.2013

2^168605209-1 not prime

Filed under: Allgemein — Tags: — Thomas @ 10:03

Ich dacht mir, gibt das doch mal in den Taschenrechner ein und überprüfe, ob diese Mersenne Zahl wirklich keine Primzahl ist.
Normale Taschenrechner können so große Zahlen nicht handeln, aber zum Glück gibt es ja die Konsolentools. Z.B. das Programm bc.

echo 2^168605209 | bc -l > zahl
wc -ml zahl
746401 52248027 zahl

Das Ergebnis hat also 51501626 Ziffern (Man muss das Zeilenfortsetzungszeichen "\" abziehen).
Die Zahl 40695358776195832999 soll angeblich ein Faktor sein. Wenn man bc damit füttert, bekommt man eine halbe Stunde später das Ergebnis. Hier die letzten paar Ziffern der Zahl: 432489.0
Wie man sieht ist die Nachkommastelle 0 und damit die Zahl ein ganzer Teiler.

wc -ml ergebnis
746401 52248009 ergebnis

Das Ergebnis hat also 51501608 Ziffern. Halt! Der Dezimalpunkt und die Nachkomma Null zählen nicht mit, also 51501606 Ziffern.
Das macht ein Unterschied von 18 Ziffern gegenüber der Mersenne Zahl. Und der Faktor hat 20 Stellen. Na wo könnten denn die andern 2 Stellen geblieben sein? ;)

13.03.2013

5V to 1.2V

Filed under: Allgemein — Tags: — Thomas @ 22:03

Hier mal eine komische Schaltung um 1.2V aus 5V zu gewinnen. Wenn man annimmt, dass kein nennenswerter Ladestrom in den Akku fließt und die LCD Uhr weniger als 1mA verbraucht, dann sollte bei der Konstruktion nicht mehr als 1.4V jemals an der Batterie anliegen. Durch den extrem geringen Strom fällt die Vorwärtsspannung der Dioden weit ab. Auf 0.3V schätze ich mal.
Dadurch wird der 1.2V Akku nicht überladen.
Ob ein leerer Akku durch diese Schaltung auch geladen wird ist fragwürdig. Aber das wird sowieso niemals notwendig sein :D

1.2V

08.03.2013

Spannungsverlauf NiMH 80mAh Knopfzelle

Filed under: Allgemein — Tags: — Thomas @ 11:03

Wollt mal wissen, ob mein Lagegerät auch mit einer Knopfzelle umgehen kann. Leider hat die dU Abschaltung nicht funktioniert.
Nach etwa 50min war sie schon voll.

knopfzelle_uebersicht

knopfzelle_spannung

02.03.2013

Pythons Zuhause

Filed under: Allgemein — Thomas @ 19:03

So, oder so ähnlich sieht dem Python sein Zuhause aus ;)

terra

15.02.2013

Heizungsverbrauch

Filed under: Allgemein — Thomas @ 10:02

Is kalt, son Winter.

heizung

11.02.2013

C64 auf dem Sperrmüll gefunden

Filed under: Allgemein — Thomas @ 09:02

C64xcf

Ein C64 mit Diskettenlaufwerk und geschätzen 100 Disketten. Ganz zufällig gefunden, als ich nochmal um 10Uhr Abends in die UNI fahren musste :) Ob er noch funktioniert werd ich in den nächsten Wochen wegen Zeitmangel ehr nicht feststellen können.

09.02.2013

Beulenpest im WLAN Router Part 3

Filed under: Allgemein — Tags: , — Thomas @ 11:02

Ja, der letzte große Kondensator, den ich noch nicht getauscht habe, bläst nun auch die Backen auf.
25V 470µF sollte er haben, aber in Wirklichkeit hat er nur noch 100µF. Die Kapazität sinkt sogar noch weiter, je länger ich das Messgerät angeschlossen lasse. Jetzt sind es nur noch 79µF.
In der Bastelkiste lag nur noch ein passender Ersatzkondi drin. Ich muss drigend mal ein paar neue kaufe, oder auslöten;)

So, nun sollte wieder Ruhe sein mit dem Ding.

07.02.2013

Temperatur im Terrarium

Filed under: Allgemein — Thomas @ 18:02

python_temp

Ich habe mir leider die Starttemperatur nicht notiert. Als Modellgleichgung habe ich einfach die e-Funktion verwendet.

-a*exp(-x*b) + c

Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 4.75243          +/- 0.4415       (9.291%)
b               = 2.43808          +/- 0.3206       (13.15%)
c               = 38.1491          +/- 0.4577       (1.2%)

Hier die Messwerte

17:06:59 33.5
17:07:33 33.6
17:08:50 33.7
17:11:27 33.9
17:12:35 34.0
17:14:00 34.1
17:15:28 34.2
17:16:50 34.3
17:18:30 34.4
17:20:00 34.5
17:22:00 34.6
17:23:20 34.7
17:26:00 34.8
17:27:15 34.9
17:30:30 35.0
17:32:42 35.2
17:39:00 35.5
17:45:00 35.8

Hier die gnuplot commands

set xdata time
set timefmt x "%H:%M:%S"
set format x "%H:%M"
set kex left
set xlabel "time"
set ylabel "temp"
f(x) = -a*exp(- (b*(x-61500)/(70000-61500)) ) + c
fit f(x) "2.808" using 1:2 via a,b,c
plot [61500:70000] "2.808" using 1:2 with linespoints title "temp", f(x) title "approx"

06.02.2013

Luftfeuchte im Terrarium

Filed under: Allgemein — Thomas @ 19:02

python luftfeuchte

« Newer PostsOlder Posts »

Powered by WordPress