Wurzelziehen in Batch

^quit

New member
Hoi.
Ich wollte mal wissen, ob es möglich is in Batch Dateien Wurzeln zu ziehen?
Wenn ja wie?

mfg
^quit
 

saberrider

New member
In Dos/Windows .bat Dateien sicher nicht - es gibt AFAIK nicht mal eine simple Arithmetik, also nicht mal + oder - geschweige denn sqrt(). So lässt sich nicht mal das Heron-Verfahren nachprogrammieren und somit auch keine Wurzeln bestimmen.

Gruß,
raziel
 

^quit

New member
OK danke.
Das is sche***.
Ich hab zwar nur die Hälfte verstanden, aber es gibt keine Möglichkeit WUrzeln zu ziehen.
Schade...

mfg
^quit
 

NULL!=NULL

New member
es wäre aber durchaus möglich ein total simples programm zu schreiben (in ner anderen prog sprache) was als parameter den radianten der wurzel hat und als return das ergebnis..
 

saberrider

New member
Nur bedingt. Der Rückgabewert des Programms ist grundsätzlich ein Integer (eine Ganzzahl), das ginge höchstens mit runden auf die nächste Ganzzahl, wodurch das Ergebnis aber extrem abgefälscht wird.
 

Ranma

New member
... kommt drauf an, man kann das Result ;) ja auch mit n-nachkommastellen in ein File schreiben und im Batch einlesen. Hängt IMO davon ab, was denn mit dem Ergebnis genacht werden soll...
 

NULL!=NULL

New member
Original von saberrider
Nur bedingt. Der Rückgabewert des Programms ist grundsätzlich ein Integer (eine Ganzzahl), das ginge höchstens mit runden auf die nächste Ganzzahl, wodurch das Ergebnis aber extrem abgefälscht wird.

wäre mir neu das ein programm GRUNDSÄTZLICH integer hat...

zb wenn ich das hier nehme:

float main()
{
return irgendwas
}

dann is der return kein integer sondern ein float...
 

Lesco

New member
Nur dumm, dass das nicht geht, als Rückgabewert ist systembedingt grundsätzlich nur eine Ganzzahl möglich.

Code:
float main(int argc, char* argv[])
{
	return 1.56;
}
OllyDbg:
Process terminated, exit code D(13.)

Edit: Jetzt, wo ich gerade mal nachdenke, sind genau genommen nur 32-Bit als Rückgabewert möglich, darin lässt sich auch eine Gleitkommazahl speichern(float=32bit), aber ich bezweifle, dass man damit dann aus der einer Batch-Datei irgendwas anfangen kann.
 

saberrider

New member
Edit: Jetzt, wo ich gerade mal nachdenke, sind genau genommen nur 32-Bit als Rückgabewert möglich, darin lässt sich auch eine Gleitkommazahl speichern(float=32bit), aber ich bezweifle, dass man damit dann aus der einer Batch-Datei irgendwas anfangen kann.
Auf 64-Bit Systemen müsste theoretisch ein 64-Bit möglich sein, deshalb schrieb ich schlicht "Ganzzahl" ;)

Natürlich kann man da *irgendwie* eine float reinquetschen, allerdings wird man damit in der Batch nichts anfangen können, weil, wie oben schon angemerkt, schlicht die Arithmetik für fehlt.

Übrigens ist das:
Code:
float main()
imho bei keinem C/C++-Standard erlaubt. Der GCC meckert schon beim Versuch solch einen Unsinn zu compilieren ;) Hintergrund: Das Ergebnis wird am Ende auf ein Prozessorregister geschoben und vom OS aus diesem Register ausgelesen.
 

NULL!=NULL

New member
könnte man nicht einfach das ganze als char zurückgeben?

zb
char main()
{
float a=4431,134;
char *blubb;

blubb=floattostr(a);

return blubb;
}

also ich denke die befehle gibt es in echt nicht aber das programm hier soll nur das prinzip zeigen was ich meine

würde das nicht gehen?
 

Lesco

New member
So gibts, du lediglich einen Pointer auf den String, der nach dem Beenden deines Programms sowieso nicht mehr existiert zurück.

Hier mal eine genauere Erklärung:
Unter Windows ruft ein Programm ExitProcess(UINT exitCode) auf wobei exitCode ein 32-Bit Wert ist. Der Rest ist Interpretationssache, diese 32 Bit können eine Ganzzahl, eine Gleitkommazahl oder was auch immer beeinhalten. Aber normalerweise werden diese 32 Bit als Ganzzahl interpretiert und daher hat es keinen Sinn ein float-Wert darein zu packen, obwohl ein float auch 32-Bit sind. Vorallem in einem Batch-Skript wird es kaum möglich sein, was anderes damit zu machen.
Natürlich könntest du auch einen Zeiger auf was auch immer in den 32-Bit ablegen, jedoch kannst du das aus 2 Gründen vergessen:
1. Windows' Speichermodell: Jeder Prozess hat seine eigenen 4 Gigabyte an Speicher, die er addressieren kann, d.h. während 0x400000 bei deinem Programm auf "235.23" zeigen kann, kann in einem anderen Prozess an Stelle 0x400000 "hallo" oder Programmcode oder was auch immer stehen(der Speicher könnte auch noch nicht reserviert sein, was eine AV verursachen würde).
2. Wenn dein Programm beendet wird, wird der Speicher den dein Programm zugeteilt hatte, wieder freigegeben, d.h. der Inhalt ist normalerweise weg.
 

Ranma

New member
Original von Lesco
...2. Wenn dein Programm beendet wird, wird der Speicher den dein Programm zugeteilt hatte, wieder freigegeben, d.h. der Inhalt ist normalerweise weg.

mein Reden: gib den ermittelten Wert in ein txt (oder sonstein)-File aus und lies den Inhalt des Files im Batch wieder ein ...
 

NULL!=NULL

New member
so wies aussieht isses also totaler wahnsinn mit ner batch datei irgendwelche fließkommazahlen einlesen zu wollen...

mir fällt aber jetz noch was ein...

man könnte doch sowas machen

void main()
{
char pfad[]="C:\\batch.bat";
system("%s 1,4312",pfad);
return;
}
 

Lesco

New member
Original von NULL!=NULL
so wies aussieht isses also totaler wahnsinn mit ner batch datei irgendwelche fließkommazahlen einlesen zu wollen...

mir fällt aber jetz noch was ein...

man könnte doch sowas machen

void main()
{
char pfad[]="C:\\batch.bat";
system("%s 1,4312",pfad);
return;
}

Das ginge schon, doch wofür brauchst du dann die Batch-Datei?
 

NULL!=NULL

New member
hm ich bin wohl vom thema abgekommen... tut mir leid

naja man könnte doch in der batch schreiben dieses eine wo die parameter benutzt werden...
zb

if "%1"=="bla bla" oder so was

oder

start "programm.exe %1"
 

Lesco

New member
Warum solltest du das dann in einer Batch schreiben, wenn du sowieso ein C-Programm hast, was die Batch aufruft? Es wäre doch einfacher das Ergebnis gleich im C-Programm weiter zu verarbeiten.
 

improoofe

New member
1. multiplizieren geht
2. wer multiplizieren und teilen kann braucht keine kommas - eine 100 ist eine 1 im fall mit 2 nachkommastellen
3. GenauigkeitsVariable die nur die anzahl der durchläufe als ausschlussverfahren angibt und wie ein dummes schulkind versucht sich an den Teiler heranzutasten dessen multiplikator zur wurzel theo immer gleicht
4.lol Batch kann wurzeln ziehn (wurde nicht gesagt dass ne 3erwurzel oder so auch beinhaltet sein muss oder müssen die taschenrechner aus dem schulunterricht gestrichen werden um alle verstehen zu lassen dass es ein fehler ist kreativität und logik zu trennen? wer besser kopfrechnen kann wie ich kann auch bessere formeln inneklatsche
 

schwedenmann

Stammuser
hallo

siehe hier


oder eben in der batch eine andere Scriptsprache aufrufen:LOL:

mfg
schwedenmann
 
Oben