Moin
Ich habe diese Formel:
Als effizienteste Lösung dieser Formel habe ich mir das überlegt:
In Abhängigkeit von k kommen als einzelne Summanden 1/1, 1/2, 1/4, 1/8, usw. raus.
Das sind - von 1/1 abgesehen - genau die Brüche, die in der Mantisse einer Gleitkommazahl stehen.
Wenn ich den Exponenten also um Eins erhöhe (die Mantisse beginnt ja immer mit 0,...[binär], meine Summe aber immer mit 1,... [binär]) und k-mal eine Eins in die Mantisse setze, habe ich schneller als bei allen anderen Möglichkeiten das Ergebnis berechnet.
Das Problem ist jetzt allerdings, dass man offenbar keine Bitoperationen auf Doubles anwenden darf.
summe.h
summe.c
Der GNU C-Compiler gibt mir das als Fehlermeldung zurück:
Kann man keine Bitoperationen auf Doubles anwenden? Das wäre ja doof.
Kann mir jemand etwas dazu sagen? Es kann doch nicht sein, dass das bei Integer geht und bei Gleitkommazahlen nicht.
Gruß, Laurin
Ich habe diese Formel:
Als effizienteste Lösung dieser Formel habe ich mir das überlegt:
In Abhängigkeit von k kommen als einzelne Summanden 1/1, 1/2, 1/4, 1/8, usw. raus.
Das sind - von 1/1 abgesehen - genau die Brüche, die in der Mantisse einer Gleitkommazahl stehen.
Wenn ich den Exponenten also um Eins erhöhe (die Mantisse beginnt ja immer mit 0,...[binär], meine Summe aber immer mit 1,... [binär]) und k-mal eine Eins in die Mantisse setze, habe ich schneller als bei allen anderen Möglichkeiten das Ergebnis berechnet.
Das Problem ist jetzt allerdings, dass man offenbar keine Bitoperationen auf Doubles anwenden darf.
summe.h
Code:
double summeBitoperationen(unsigned long k);
Code:
#include <stdio.h>
#include "summe.h"
int main (int argc, char *argv[])
{
unsigned long k = 1;
double ergebnis;
ergebnis = summeBitoperationen(k);
printf("Summe nach Bitoperationen: %d\n", ergebnis);
}
double summeBitoperationen(unsigned long k)
{
unsigned long i;
double rueckgabe = 0;
if ( k >= 0)
{
// Exponent setzen
rueckgabe = (rueckgabe | 1) << 7; // Fehler Zeile 21
// k-mal alle Bits nach links shiften und das neu eingefügte Bit auf 1 setzen
for (i = 0; i < k; i++)
{
rueckgabe = (rueckgabe << 1) | 1; // Fehler Zeile 26
}
// Alle Bits so weit nach links shiften, bis Exponent und Mantisse
// nach IEEE-754-Format an der richtigen Stelle stehen.
rueckgabe = rueckgabe << (52 - k); // Fehler Zeile 31
}
return rueckgabe;
}
Der GNU C-Compiler gibt mir das als Fehlermeldung zurück:
Code:
summe.c: In function `summeBitoperationen':
summe.c:21: error: invalid operands to binary |
summe.c:26: error: invalid operands to binary <<
summe.c:31: error: invalid operands to binary <<
Kann man keine Bitoperationen auf Doubles anwenden? Das wäre ja doof.
Kann mir jemand etwas dazu sagen? Es kann doch nicht sein, dass das bei Integer geht und bei Gleitkommazahlen nicht.
Gruß, Laurin