MCF_read |
MCD_read |
MCE_read |
MI_read | MBI_read | MSI_read | MLI_read | MQI_read |
MU_read | MUB_read | MUS_read | MUL_read | MUQ_read |
|
Funktion | eine Matrix im ASCII-Format aus einem Stream einlesen |
|
Syntax C/C++ | #include <MFstd.h>
void MF_read( fMatrix MA, ui ht, ui len, FILE *stream ); |
C++ MatObj | #include <OptiVec.h>
void matrix<T>::read( FILE *stream ); |
Pascal/Delphi | uses MFstd;
{Delphi-Version:}
procedure MF_read( MA:fMatrix; ht, len:UIntSize; var Stream:TextFile );
{Turbo Pascal-Version:}
procedure MF_read( MA:fMatrix; ht, len:UIntSize; var Stream:Text ); |
|
CUDA-Funktion C/C++ | #include <cudaMFstd.h>
int cudaMF_read( fMatrix d_MA, ui ht, ui len, FILE *stream );
int cudaMF_read_buf( fMatrix d_MA, ui ht, ui len, FILE *stream, fVector h_Wk );
|
CUDA-Funktion Pascal/Delphi | uses MFstd;
function cudaMF_read( d_MA:fMatrix; ht, len:UIntSize; var Stream:TextFile ): IntBool;
function cudaMF_read_buf( d_MA:fMatrix; ht, len:UIntSize; var Stream:TextFile; h_Wk:fVector ): IntBool;
|
|
Beschreibung | Die Matrix A mit ht*len Elementen wird im ASCII-Format aus stream eingelesen. Normalerweise wird man diese Funktion verwenden, um Matrizen aus anderen Programmen zu importieren, die Zahlen nicht im PC-Maschinenformat speichern können. Man kann sie auch benutzen, um Matrizen wiederherzustellen, die zuvor mittels MF_write gespeichert wurden. Um Zwischenergebnisse zu speichern und wiederherzustellen, sollte man allerdings das Funktionenpaar MF_store / MF_recall unbedingt gegenüber MF_write / MF_read vorziehen (über die Gründe siehe MF_write).
Komplexe Versionen:
Real- und Imaginär-Teil dürfen (müssen aber nicht) in geschweifte { } oder runde Klammern ( ) eingeschlossen sein. Man muss allerdings konsequent sein: Entweder müssen alle oder gar kein Element eingeklammert sein.
Ein Komma darf (muss aber nicht) zwischen Real- und Imaginärteil stehen. Der Imaginärteil muss stets explizit angegeben werden, auch wenn er gleich 0 sein sollte.
Beispiele für gültige Formate sind:
0.3 0.5 (weder Klammern noch trennendes Komma)
0.3, 0.5 (keine Klammern; Komma zwischen Re und Im)
{0.3 0.5} (geschweifte Klammern; kein Komma)
(0.3, 0.5) (runde Klammern und Komma)
|
C/C++-spezifisch: | Die zu lesenden Elemente müssen durch Whitespace (' ', '\n' oder '\t') voneinander getrennt sein. Zusätzlich ist ein (!) "Nicht-Whitespace"-Zeichen nach jedem Eintrag erlaubt, sofern es direkt auf die letzte Ziffer folgt. Nach ihm muss wiederum mindestens ein Whitespace-Zeichen folgen.
|
Pascal/Delphi-spezifisch: | Die zu lesenden Elemente müssen durch Whitespace (' ', #13, or #9) voneinander getrennt sein.
Während die C/C++-Version dieser Funktionen den Konventionen der C-Funktionen strtod, strtol usw. folgt, hat sich die Pascal/Delphi-Version nach den Regeln der Pascal/Delphi Funktion Read zu richten. Hierdurch wird die Pascal/Delphi-Version wesentlich weniger flexibel als die C/C++-Version:
- es sind keine Trennzeichen außer dem Leerzeichen (' ') und #9 erlaubt,
- überlaufende Eingabe-Zahlen werden nicht automatisch abgeschnitten.
nur CUDA-Versionen: cudaM?_read_buf übernimmt einen Host-Vektor h_Wk als zusätzliches Argument. Dieser dient als Pufferspeicher und muss (mindestens) dieselbe Größe haben wie X. Hierdurch wird die interne Bereitstellung von Pufferspeicher bei cudaM?_read eingespart, so dass cudaM?_read_buf etwas schneller ist.
|
|
Fehlerbehandlung | C/C++:
Überlaufende Eingabezahlen werden stillschweigend auf ±HUGE_VAL gesetzt.
Pascal/Delphi:
Überlaufende oder anderweitig nicht den Format-Bestimmungen entsprechende Eingabezahlen führen zu einem I/O-Fehler. |
|
Rückgabewert | keiner, außCUDA-Variante; dort: 0, wenn fehlerfrei, sonst ungleich 0 |
|
Querverweis | MF_write, VF_nread, MF_store, MF_recall, Kap. 14 |