Java float Verarbeitung < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | JAVA: Funktion zum austausch zweier Gleitkommerzahlen. |
Hallo!
Hab eine Funktion geschrieben, die die Aufgabe erfüllt. Leider gibt es eine Differenz zwischen den eingegeben Werten und der Ausgabe.
#include <stdio.h>
void swap (float *a, float *b)
{
float tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
float main()
{
float zahl1, zahl2;
printf ("Bitte geben Sie die erste Zahl [mm] ein\n");
[/mm]
scanf ("%f", &zahl1);
printf ("Bitte geben Sie die zweite Zahl [mm] ein\n");
[/mm]
scanf ("%f", &zahl2);
printf (" %f <=> %f [mm] \n", [/mm] zahl1, zahl2);
swap (&zahl1, &zahl2);
printf (" %f <=> %f [mm] \n", [/mm] zahl1, zahl2);
return 0;
}
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 07:25 Mi 07.11.2012 | Autor: | rainerS |
Hallo!
> JAVA: Funktion zum austausch zweier Gleitkommerzahlen.
> Hallo!
>
> Hab eine Funktion geschrieben, die die Aufgabe erfüllt.
Das ist aber kein Java-, sondern C-Code. Was soll's denn nun sein?
> Leider gibt es eine Differenz zwischen den eingegeben
> Werten und der Ausgabe.
Das ist ganz normal. Du musst dir erstmal klarmachen, was Gleitkommazahlen sind, nämlich Binärbrüche mit endlicher Anzahl von Binärstellen. Du kannst nunmal die meisten Dezimalbrüche nicht exakt durch Binärbrüche darstellen.
Intern sind float-Zahlen Binärbrüche mit 23 Stellen nach IEEE 754, das heisst, dein relativer Fehler bei der Umwandlung durch Einlesen kann bis zu [mm] $2^{-23}\approx 1{,}2*10^{-7}$ [/mm] groß sein.
Hier siehst du eine Abweichung $(45{,}89-45{,}889999)/45{,}89 [mm] \approx 2{,}2*10^{-8}$, [/mm] also kein Grund zur Sorge.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:34 Mi 07.11.2012 | Autor: | martin_vie |
Danke!
Stimmt Code soll in C sein. :)
LG
|
|
|
|