Discussion:
Rätselhafte Maximierungsaufgabe
(zu alt für eine Antwort)
Jens Feldkamp
2005-03-05 14:38:34 UTC
Permalink
Hallo noch mal!

Ich habe noch ein weiteres Problem, fürchte aber, dass ich da einfach
nur ein Brett vor dem Kopf habe. Also, die Aufgabe lautet:

x+y+z=60
x*y^2*z^3 soll maximal werden.

Mir fehlt da einfach gerade jede Idee zu, obwohl ich glaube, dass das
soo schwer nicht ist.

*duck*
Jens
Hendrik van Hees
2005-03-05 15:04:46 UTC
Permalink
Post by Jens Feldkamp
Hallo noch mal!
Ich habe noch ein weiteres Problem, fürchte aber, dass ich da einfach
x+y+z=60
x*y^2*z^3 soll maximal werden.
Mir fehlt da einfach gerade jede Idee zu, obwohl ich glaube, dass das
soo schwer nicht ist.
Hier ist die Constraint-Gleichung so einfach, daß man sie nach einer
Variablen (z.B. x) auflösen und dann das Extremwertproblem in zwei
Variablen lösen kann:

x=60-y-z

f(y,z)=(60-y-z) y^2 z^3

Dann suchst Du Stellen mit

\partial_y f=0 und \partial_z f=0,

bestimmst die Jacobimatrix und prüfst sie auf positive Definitheit an
den fraglichen Stellen und gut ist's.
--
Hendrik van Hees Cyclotron Institute
Phone: +1 979/845-1411 Texas A&M University
Fax: +1 979/845-1899 Cyclotron Institute, MS-3366
http://theory.gsi.de/~vanhees/ College Station, TX 77843-3366
Jens Feldkamp
2005-03-06 11:16:05 UTC
Permalink
Hi!
Post by Hendrik van Hees
Hier ist die Constraint-Gleichung so einfach, daß man sie nach einer
Variablen (z.B. x) auflösen und dann das Extremwertproblem in zwei
x=60-y-z
f(y,z)=(60-y-z) y^2 z^3
Dann suchst Du Stellen mit
\partial_y f=0 und \partial_z f=0,
bestimmst die Jacobimatrix und prüfst sie auf positive Definitheit an
den fraglichen Stellen und gut ist's.
*patsch* Aua. Danke.

Jens
Hermann Kremer
2005-03-06 17:00:42 UTC
Permalink
Post by Hendrik van Hees
Post by Jens Feldkamp
Hallo noch mal!
Ich habe noch ein weiteres Problem, fürchte aber, dass ich da einfach
x+y+z=60
x*y^2*z^3 soll maximal werden.
Mir fehlt da einfach gerade jede Idee zu, obwohl ich glaube, dass das
soo schwer nicht ist.
Hier ist die Constraint-Gleichung so einfach, daß man sie nach einer
Variablen (z.B. x) auflösen und dann das Extremwertproblem in zwei
x = 60-y-z
f(y,z) = (60-y-z) y^2 z^3
Dann suchst Du Stellen mit
\partial_y f=0 und \partial_z f=0,
bestimmst die Jacobimatrix und prüfst sie auf positive Definitheit an
den fraglichen Stellen und gut ist's.
Mit Lagrange-Faktor ist diese Aufgabe aber auch nicht schwierig:

F(x,y,z) = x*y^2*z^3 + lambda*(x + y + z - 60)

Partielle Ableitungen:

F_x = y^2*z^3 + lambda = 0 (1)
F_y = 2*x*y*z^3 + lambda = 0 (2)
F_z = 3*x*y^2*z^2 + lambda = 0 (3)

(2)-(1): y*z^3*(2*x - y) = 0 ==> y = 2*x
(3)-(1): x*y*z^2*(3*y - 2*z) = 0 ==> z = 3*y/2 = 3*x

Einsetzen in Nebenbedingung: x + 2*x + 3*x = 60 ==> x = 10, y = 20, z = 30

Grüße
Hermann
--
Amicus
2005-03-06 17:00:55 UTC
Permalink
On Sun, 6 Mar 2005 18:00:42 +0100, "Hermann Kremer"
Post by Hermann Kremer
x = 10, y = 20, z = 30
Die Werte kommen mir bekannt vor... ;-)


A.
Hermann Kremer
2005-03-06 23:07:02 UTC
Permalink
Post by Amicus
On Sun, 6 Mar 2005 18:00:42 +0100, "Hermann Kremer"
Post by Hermann Kremer
x = 10, y = 20, z = 30
Die Werte kommen mir bekannt vor... ;-)
Will ich doch auch sehr hoffen ;-))

Grüße
Hermann
--
Amicus
2005-03-05 15:12:44 UTC
Permalink
On Sat, 05 Mar 2005 15:38:34 +0100, Jens Feldkamp
x + y + z = 60
x * y^2 * z^3 soll maximal werden.
Mir fehlt da einfach gerade jede Idee zu [...]
I c h würde das ja so lösen:

#include <stdio.h>

int main(void)
{
int x, y, z, temp, xmax, ymax, zmax, max = 0;

for (x = 0; x <= 60; x++)
for (y = 0; y <= 60; y++)
for (z = 0; z <= 60; z++)
{
if (x + y + z == 60)
{
temp = x * y*y * z*z*z;

if (temp > max)
{
max = temp;

xmax = x;
ymax = y;
zmax = z;
}
}
}

printf("x = %d\ny = %d\nz = %d\n", xmax, ymax, zmax);

return 0;
}


A.
Stefan Ram
2005-03-05 15:26:28 UTC
Permalink
int x, y, z, temp, xmax, ymax, zmax, max = 0; (...)
for (z = 0; z <= 60; z++) { (...)
temp = x * y*y * z*z*z;
ISO/IEC 9899:1999 (E) 5.2.4.2.1 verlangt, daß INT_MAX
mindestens 32767 ist. Es ist möglich, daß z*z*z u.s.w. nur
modulo INT_MAX berechnet wird, was dann hier zu einem falschen
Ergebnis führen würde. Daher sollte hier "int" in einigen
Fällen durch "long" ersetzt werden.
Stefan Ram
2005-03-05 15:32:43 UTC
Permalink
int x, y, z, temp, xmax, ymax, zmax, max = 0; (...)
for (z = 0; z <= 60; z++) { (...)
temp = x * y*y * z*z*z;
ISO/IEC 9899:1999 (E) 5.2.4.2.1 verlangt, daß INT_MAX
mindestens 32767 ist. Es ist möglich, daß z*z*z u.s.w. nur
modulo INT_MAX+1 berechnet wird, was dann hier zu einem
falschen Ergebnis führen könnte. Daher sollte hier "int" in
einigen Fällen durch "long" ersetzt werden.
Amicus
2005-03-05 17:25:05 UTC
Permalink
Post by Stefan Ram
ISO/IEC 9899:1999 (E) 5.2.4.2.1 verlangt, daß INT_MAX
mindestens 32767 ist. Es ist möglich, daß z*z*z u.s.w. nur
modulo INT_MAX+1 berechnet wird, was dann hier zu einem
falschen Ergebnis führen könnte. Daher sollte hier "int" in
einigen Fällen durch "long" ersetzt werden.
Klingt vernünftig. Allerdings ist meines Wissens nicht *gewährleistet*,
dass long > int ist. (IIRC legt der Standard bloß fest: short <= int <=
long). Aber das nur am Rande.

Unter dem guten alten MS-DOS (16-Bit) hatten ints in der Tat nur 16 Bit,
da hätte die alte Version des Programms wohl ein falsches Resultat
produziert. :-/

Hier also eine verbesserte Version:

#include <stdio.h>

int main(void)
{
int x, y, z, xmax, ymax, zmax;
long temp, max = 0;

for (x = 0; x <= 60; x++)
for (y = 0; y <= 60; y++)
for (z = 0; z <= 60; z++)
{
if (x + y + z == 60)
{
temp = x * y*y * z*z*z;

if (temp > max)
{
max = temp;

xmax = x;
ymax = y;
zmax = z;
}
}
}

printf("x = %d\ny = %d\nz = %d\n", xmax, ymax, zmax);

return 0;
}


A.
Stefan Ram
2005-03-05 17:43:06 UTC
Permalink
Allerdings ist meines Wissens nicht *gewährleistet*, dass long >
int ist. (IIRC legt der Standard bloß fest: short <= int <=
long).
Die Norm legt für INT_MAX und LONG_MAX Mindestwerte fest.
Bezeichne ich diese als INT_MAX_MIN und LONG_MAX_MIN, so
gilt:

INT_MAX_MIN = 32767
LONG_MAX_MIN = 2147483647
LONG_MAX_MIN > INT_MAX_MIN
int x, y, z, xmax, ymax, zmax;
long temp, max = 0; (...)
temp = x * y*y * z*z*z;
Leider wird das wohl noch nicht ganz reichen, weil hier bei
der Auswertung des Teilausdrucks "z*z*z" weiterhin nur int
verwendet wird. Wenn "z" den Typ "int" behalten soll, dann
temp =( long )x * y*y * z*z*z;
(Dadurch, daß der erste Faktor des Typs "long" ist, sollten
die anderen Faktoren auch nach "long" gewandelt werden.)
P. Latz-Halter
2005-03-05 17:50:52 UTC
Permalink
Stefan Ram schrieb
Post by Stefan Ram
INT_MAX_MIN = 32767
Die C-Implementierung hängt von der Hardwäre ab.
Auf 32-Bit-Maschinen wird seit vielen, vielen Jahren
INT als LONG implementiert (Ausnahme embedded
Softwäre für gewisse Chips).

Wenn du ausdrücklich 16-Bit-Werte willst, dann
mußt du SHORT deklarieren, was aber weder
Rechenzeit (Prozessorregister schieben eh'
immer 32 Bits) noch Speicherplatz bringt
(außer bei Unions und solcherlei Speziealfällen).
Post by Stefan Ram
LONG_MAX_MIN = 2147483647
LONG_MAX_MIN > INT_MAX_MIN
Amicus
2005-03-05 17:53:29 UTC
Permalink
On Sat, 5 Mar 2005 18:50:52 +0100, "P. Latz-Halter"
Post by Stefan Ram
INT_MAX_MIN = 32767
Die C-Implementierung hängt von der Hardware ab.
Auf 32-Bit-Maschinen wird seit vielen, vielen Jahren
INT als LONG implementiert (Ausnahme embedded
Softwäre für gewisse Chips).
Hüstel... Das ist sehr die Frage, ob das auch unter MS-DOS (auch auf
einem modernen PC) gilt. Wenn ich mich recht erinnere, hatten die ints
hier (sagen wir in Turbo-C) in der Tat nur 16-Bit. (Und mein Programm
würde auf so einem System wohl nichts Sinnvolles ausspucken, da hat der
gute Stefan Ram schon recht.)


A.
P. Latz-Halter
2005-03-05 18:13:30 UTC
Permalink
Amicus schrieb
Post by Amicus
Post by Stefan Ram
INT_MAX_MIN = 32767
Die C-Implementierung hängt von der Hardware ab.
Auf 32-Bit-Maschinen wird seit vielen, vielen Jahren
INT als LONG implementiert (Ausnahme embedded
Softwäre für gewisse Chips).
Hüstel... Das ist sehr die Frage, ob das auch unter MS-DOS (auch auf
einem modernen PC) gilt. Wenn ich mich recht erinnere, hatten die ints
hier (sagen wir in Turbo-C) in der Tat nur 16-Bit. (Und mein Programm
würde auf so einem System wohl nichts Sinnvolles ausspucken, da hat der
gute Stefan Ram schon recht.)
Seit dem die Protected-Mode-Prozessoren eingeführt wurden,
also der 386 hat Microsoft ihr 16-Bit Visual C Version 6.xx nicht
mehr weiterentwickelt, sondern ist mit dem Visual-Studio zum völlig
anderen 32-Bit Paradigma übergegangen (Treiber!). Das ist viele
Jahre her (10?).

Aber du kannst jederzeit z.B. noch mit Turbo-C V 1 (paßt auf Diskette)
oder Microsoft 16-Bit Visual C Version 6 im Real-Mode programmieren!
Amicus
2005-03-05 18:16:39 UTC
Permalink
On Sat, 5 Mar 2005 19:13:30 +0100, "P. Latz-Halter"
... hat Microsoft ihr 16-Bit Visual C Version 6.xx nicht
mehr weiterentwickelt, sondern ist mit dem Visual-Studio
zum völlig anderen 32-Bit Paradigma übergegangen. Das ist
viele Jahre her.
HALLO!!! Es gibt noch eine andere Welt als
lediglich die von MS (unter Windows).
Aber du kannst jederzeit z.B. noch mit Turbo-C V 1 (paßt auf Diskette)
[unter MS-DOS] programmieren...
Na siehst Du. Und d a s auf einer 32-Bit Maschine. Trotzdem haben die
ints dann lediglich 16 Bit. Und man würde mit der ursprünglichen Version
meinem Progrämmchens "auf die Nase fallen"; das muss ja nicht sein.


A.
P. Latz-Halter
2005-03-05 18:22:53 UTC
Permalink
Amicus schrieb ^
Post by Amicus
... hat Microsoft ihr 16-Bit Visual C Version 6.xx nicht
mehr weiterentwickelt, sondern ist mit dem Visual-Studio
zum völlig anderen 32-Bit Paradigma übergegangen. Das ist
viele Jahre her.
HALLO!!! Es gibt noch eine andere Welt als
lediglich die von MS (unter Windows).
Hüstel... Das ist sehr die Frage, ob das auch unter MS-DOS (auch auf
einem modernen PC) gilt. Wenn ich mich recht erinnere, hatten die ints
hier (sagen wir in Turbo-C) in der Tat nur 16-Bit.
P. Latz-Halter
2005-03-05 18:26:08 UTC
Permalink
Amicus schrieb
Post by Amicus
Post by P. Latz-Halter
Aber du kannst jederzeit z.B. noch mit Turbo-C V 1 (paßt auf Diskette)
[unter MS-DOS] programmieren...
Na siehst Du. Und d a s auf einer 32-Bit Maschine. Trotzdem haben die
ints dann lediglich 16 Bit.
Eben n i c h t ! Denn das war vor deutlich mehr als 10 Jahren (80286).
Post by Amicus
Und man würde mit der ursprünglichen Version
meinem Progrämmchens "auf die Nase fallen"; das muss ja nicht sein.
Immer, wenn du ein Register, z.B. ein 16-Bit-Register zum
Ü b e r l a u f e n bringst, fällt dein Programm auf die Nase.
Amicus
2005-03-05 17:48:14 UTC
Permalink
Post by Stefan Ram
Die Norm legt für INT_MAX und LONG_MAX Mindestwerte fest.
Bezeichne ich diese als INT_MAX_MIN und LONG_MAX_MIN, so
INT_MAX_MIN = 32767
LONG_MAX_MIN = 2147483647
LONG_MAX_MIN > INT_MAX_MIN
Oha! Dann hat sich aber zwischen ANSI-C und C99 hier etwas geändert.
Na gut, ich sollte vielleicht dazu sagen, dass mein Programm in ANSI-C
geschriben ist (sein soll). ;-)


A.
P. Latz-Halter
2005-03-05 17:56:36 UTC
Permalink
Amicus
Post by Amicus
Post by Stefan Ram
INT_MAX_MIN = 32767
LONG_MAX_MIN = 2147483647
LONG_MAX_MIN > INT_MAX_MIN
Oha! Dann hat sich aber zwischen ANSI-C und C99 hier etwas geändert.
Na gut, ich sollte vielleicht dazu sagen, dass mein Programm in ANSI-C
geschrieben ist (sein soll). ;-)
int und long sind als maschinenabhängig freigegeben,
short ist als 16-bittig und long als 32-bittig definiert.
Amicus
2005-03-05 17:59:50 UTC
Permalink
On Sat, 5 Mar 2005 18:56:36 +0100, "P. Latz-Halter"
Post by P. Latz-Halter
int und long sind als maschinenabhängig freigegeben,
short ist als 16-bittig und long als 32-bittig definiert.
Du redest Unsinn. Mach Dich mal ein wenig mit dem ANSI-C Standard
vertraut (nicht C99!), bevor Du hier solche Töne spuckst.

Hier gilt lediglich: short <= int <= long.

(Ein long braucht also in ANSI-C keineswegs größer als ein short
zu sein. (Auch wenn's eher unwahrscheinlich ist, dass es solche
Implementierungen wirklich gibt.)


A.
P. Latz-Halter
2005-03-05 18:20:35 UTC
Permalink
Amicus schrieb
Post by Amicus
Post by P. Latz-Halter
int und long sind als maschinenabhängig freigegeben,
short ist als 16-bittig und long als 32-bittig definiert.
Du redest Unsinn.
Stimmt, long in der 2. Zeile ist falsch und ich hatte
das Posting schnell noch gecancelt. Zu spät -- typo.


http://www.ac3.edu.au/SGI_Developer/books/CLanguageRef/sgi_html/ch04.html

http://www.ac3.edu.au/SGI_Developer/books/CLanguageRef/sgi_html/apa.html#Z74002
Oliver Bandel
2005-03-06 00:31:52 UTC
Permalink
Post by Amicus
On Sat, 5 Mar 2005 18:56:36 +0100, "P. Latz-Halter"
Post by P. Latz-Halter
int und long sind als maschinenabhängig freigegeben,
short ist als 16-bittig und long als 32-bittig definiert.
Du redest Unsinn. Mach Dich mal ein wenig mit dem ANSI-C Standard
vertraut (nicht C99!), bevor Du hier solche Töne spuckst.
Hier gilt lediglich: short <= int <= long.
(Ein long braucht also in ANSI-C keineswegs größer als ein short
zu sein. (Auch wenn's eher unwahrscheinlich ist, dass es solche
Implementierungen wirklich gibt.)
A.
DU redest Unsinn.

Man schaue in K&R, 2. Ausgabe, Seite 18,
da steht: long hat MINDESTENS 32 Bit.

Aber meist hat auf 32-Bit Systemen auch int 32 Bit,
womit Deine "short <= int <= long" auch stimmt.

Dennoch ist es für long garantiert, daß es die 32Bit hat.

Ciao,
Oliver
Amicus
2005-03-06 02:02:28 UTC
Permalink
On Sun, 06 Mar 2005 01:31:52 +0100, Oliver Bandel
Post by Oliver Bandel
Post by P. Latz-Halter
int und long sind als maschinenabhängig freigegeben,
short ist als 16-bittig und long als 32-bittig definiert.
Man schaue in K&R, 2. Ausgabe, Seite 18,
da steht: long hat MINDESTENS 32 Bit.
[Demnach] ist es für long garantiert, daß es die 32Bit hat.
Hüsetel... Genauer: dass es /mindestens/ 32-Bit hat. Allerdings könnte
auch ein short 32-Bit lang sein. :-)

Die Aussage:

"short ist als 16-bittig und long als 32-bittig definiert"

ist also kompletter Unsinn. (---> Weder noch.)


A.
Stefan Ram
2005-03-05 18:06:08 UTC
Permalink
Post by Amicus
Post by Stefan Ram
INT_MAX_MIN = 32767
LONG_MAX_MIN = 2147483647
LONG_MAX_MIN > INT_MAX_MIN
Oha! Dann hat sich aber zwischen ANSI-C und C99 hier etwas
geändert. Na gut, ich sollte vielleicht dazu sagen, dass mein
Programm in ANSI-C geschriben ist (sein soll). ;-)
Wieso? Was steht den auf Seite 196 Deines Exemplars
von ANSI X3.159-1989?
Amicus
2005-03-05 18:20:25 UTC
Permalink
Post by Stefan Ram
Wieso? Was steht den auf Seite 196 Deines Exemplars
von ANSI X3.159-1989?
Was steht denn da? Sag's mir. Hab leider keinen Standard zur Hand.


A.
Stefan Ram
2005-03-05 18:34:55 UTC
Permalink
Post by Amicus
Post by Stefan Ram
Wieso? Was steht den auf Seite 196 Deines Exemplars
von ANSI X3.159-1989?
Was steht denn da? Sag's mir. Hab leider keinen Standard zur
Hand.
Dies ist Anhang D mit denselben Festlegungen zu INT_MAX und
LONG_MAX wie ISO/IEC 9899:1999 (E) sie in 5.2.4.2.1 trifft.
Horst Kraemer
2005-03-06 03:56:01 UTC
Permalink
Post by Amicus
Post by Stefan Ram
Die Norm legt für INT_MAX und LONG_MAX Mindestwerte fest.
Bezeichne ich diese als INT_MAX_MIN und LONG_MAX_MIN, so
INT_MAX_MIN = 32767
LONG_MAX_MIN = 2147483647
LONG_MAX_MIN > INT_MAX_MIN
Oha! Dann hat sich aber zwischen ANSI-C und C99 hier etwas geändert.
Na gut, ich sollte vielleicht dazu sagen, dass mein Programm in ANSI-C
geschriben ist (sein soll). ;-)
Hier hat sich seit dem ersten ANSI-Standard nichts geaendert. Es gilt
nach wie vor:

Der Wertebereich eines short int muss mindestens den Bereich

-32767..32767 ( 2^16-1)

umfassen.

Der Wertebereich eines long int muss mindestens den Bereich


-2147483647..2147483647 (2^32-1)

umfassen.

Der Wertebereich eines long muss mindestens den Wertebereich eines int
und dieser muss mindestens den Wertebereich eines short umfassen, d.h.
Aufwaertskonvertierungen

short int -> int -> long int

muessen immer den Wert erhalten.

Und dies wurde bereits von Turbo-C unter DOS erfuellt. Fuer
16-Bit-Systeme gilt gewoehnlich

short 16 bit, int 16 bit, long 32 bit

Fuer 32-Bit-Systeme gilt gewoehnlich

short 16 bit, int 32 bit, long 32 bit

Natuerlich waere auch

short 32 bit, int 32 bit, long 32 bit

oder

short 64 bit, int 64 bit, long 64 bit

zulaessig, aber die fuer ein portables Programm zu "befuerchtenden"
Mindestbereiche sind nach wie vor

short 16 bit, int 16 bit, long 32 bit
--
Horst
Amicus
2005-03-06 04:44:22 UTC
Permalink
Post by Horst Kraemer
Fuer 32-Bit-Systeme gilt gewoehnlich
short 16 bit, int 32 bit, long 32 bit
Tja, und die 64-Bit Systeme sind im kommen. Hier wird sich dann folgende
"schöne" Situation ergeben:

Auf den allermeisten UNIX-Systemen hat man dann:


short 16 bit, int 32 bit, long 64 bit (LP64)


Das erscheint nur "logisch" bzw. "natürlich".

Aba... unter MS 64-Bit Windows wird man haben:


short 16 bit, int 32 bit, long 32 bit (LLP64)


Toll, was?! :-/


A.
Hendrik van Hees
2005-03-06 05:13:21 UTC
Permalink
Post by Amicus
short 16 bit, int 32 bit, long 64 bit (LP64)
Das erscheint nur "logisch" bzw. "natürlich".
short 16 bit, int 32 bit, long 32 bit (LLP64)
Toll, was?! :-/
Cool, und dann stürzen wieder Arianeraketen mit wissenschaftlich
kostbarer Nutzlast ab :-((.
--
Hendrik van Hees Cyclotron Institute
Phone: +1 979/845-1411 Texas A&M University
Fax: +1 979/845-1899 Cyclotron Institute, MS-3366
http://theory.gsi.de/~vanhees/ College Station, TX 77843-3366
Horst Kraemer
2005-03-06 09:13:48 UTC
Permalink
Post by Amicus
Post by Horst Kraemer
Fuer 32-Bit-Systeme gilt gewoehnlich
short 16 bit, int 32 bit, long 32 bit
Tja, und die 64-Bit Systeme sind im kommen. Hier wird sich dann folgende
short 16 bit, int 32 bit, long 64 bit (LP64)
Das erscheint nur "logisch" bzw. "natürlich".
short 16 bit, int 32 bit, long 32 bit (LLP64)
Toll, was?! :-/
Ist doch ueberhaupt kein Problem. Beide Systeme sind auf der eigenen
Plattform abwaertskompatibel. Und wer zu diesem Zeitpunkt "Microsoft
C" lernt, schreibt Programme, die garantiert auf UNIX portabel sind.
Nur die UNIXer muessen wissen, dass ihre Programme nicht garantiert
auf MS portabel sind. So moechten wir's doch haben ;-)
--
Horst
P. Latz-Halter
2005-03-06 09:59:55 UTC
Permalink
Horst Kraemer schrieb
Post by Horst Kraemer
Post by Amicus
Toll, was?! :-/
Ist doch ueberhaupt kein Problem. Beide Systeme sind auf der eigenen
Plattform abwaertskompatibel. Und wer zu diesem Zeitpunkt "Microsoft
C" lernt, schreibt Programme, die garantiert auf UNIX portabel sind.
Nur die UNIXer muessen wissen, dass ihre Programme nicht garantiert
auf MS portabel sind. So moechten wir's doch haben ;-)
Und wer kommerziell arbeitet, der kauft sich ein Mathe-Pack, auf dem
er wirklich alle Typen hat, die er braucht (eine Primzahl wie 10^(37-1)
wird er ohne eigene Typen so und so nicht als Integer darstellen können),
das ihm auch noch die Skalierbarkeit auf alle Plattformen seiner Wahl
garantiert, also auch für den Mac und weiß was.
Martin Fuchs
2005-03-06 10:16:37 UTC
Permalink
Post by P. Latz-Halter
(eine Primzahl wie 10^(37-1)
Wenn diese Zahl prim ist, dann ist dein Name
P. Latz-Halter.
(Und nein, auch 10^37 - 1 ist keine Primzahl)


Aber du scheinst sowieso mehr aus der Troll-Ecke
zu kommen.


mf
P. Latz-Halter
2005-03-06 10:33:02 UTC
Permalink
Martin Fuchs schrieb
Post by Martin Fuchs
Post by P. Latz-Halter
(eine Primzahl wie 10^(37-1)
Wenn diese Zahl prim ist, dann ist dein Name
P. Latz-Halter.
(Und nein, auch 10^37 - 1 ist keine Primzahl)
Ist es eben keine, mein gedachtes Programm soll
das ja gerade überprüfen können, deshalb "wie".

Darum ging es doch gar nicht, ersetze 10^37 - 1
durch eine große Integerzahl, die sich stellvertretend
nicht in einem 32-Bit Register unterbringen läßt.
Post by Martin Fuchs
Aber du scheinst sowieso mehr aus der Troll-Ecke
zu kommen.
Du böse mit der Welt? Aber quote bitte in Zukunft
wie ein Gutmensch, du Vorbild.
Hans Joss
2005-03-06 10:49:23 UTC
Permalink
Post by P. Latz-Halter
Post by Martin Fuchs
(Und nein, auch 10^37 - 1 ist keine Primzahl)
Ist es eben keine, mein gedachtes Programm soll
das ja gerade überprüfen können, deshalb "wie".
Wieso ?

10^1 - 1 = 9
10^2 - 1 = 99
10^3 - 1 = 999
10^4 - 1 = 9999

10^37 - 1 = 999 ... 999

Dazu ist kein Programm notwendig.
Post by P. Latz-Halter
Darum ging es doch gar nicht, ersetze 10^37 - 1
durch eine große Integerzahl, die sich stellvertretend
nicht in einem 32-Bit Register unterbringen läßt.
Dann nimm ein 128 Bit Register.

Oder berechne mal 10^9-1.
Das geht mit 32 Bit.


mfg
Hans Joss
Hans Joss
2005-03-06 10:33:33 UTC
Permalink
Post by Martin Fuchs
10^37 - 1 ist keine Primzahl
Wenn du vom Vorhandensein von Logik ausgehst ---

--- Könnte es sein, dass es sich hier
um einen kleinen Tippfehler handelt ?

Wie steht es mit 10^37 + 1 ??
Post by Martin Fuchs
Aber du scheinst sowieso mehr aus
der Troll-Ecke zu kommen.
Nach dieser blöden Bemerkung gehörst *du* dorthin.

mfg
Hans Joss
P. Latz-Halter
2005-03-06 10:50:18 UTC
Permalink
Hans Joss schrieb
Post by P. Latz-Halter
Martin Fuchs
Post by Martin Fuchs
10^37 - 1 ist keine Primzahl
Wenn du vom Vorhandensein von Logik ausgehst ---
Nur weil alle 10er-Potenzen geradzahlig sind? ;)
Post by P. Latz-Halter
--- Könnte es sein, dass es sich hier
um einen kleinen Tippfehler handelt ?
Wie steht es mit 10^37 + 1 ??
Gut, oder 10^937 - 1 ?
Hans Joss
2005-03-06 10:58:23 UTC
Permalink
Post by P. Latz-Halter
Post by Hans Joss
Wie steht es mit 10^37 + 1 ??
Gut, oder 10^937 - 1 ?
Das ist durch 3 teilbar.

Bei 10^2938745383654836 -1 ist das auch so.

Bei 2^37 - 1 wird es schwieriger


Ich vermute, du hast da
die 10 mit der 2 verwechselt.

bei 2^31 - 1
kannst du das mit 32 Bit versuchen, zu berechnen.

mfg
Hans Joss
P. Latz-Halter
2005-03-06 11:01:52 UTC
Permalink
Horst Kraemer schrieb
Post by Horst Kraemer
Post by Amicus
Toll, was?! :-/
Ist doch ueberhaupt kein Problem. Beide Systeme sind auf der eigenen
Plattform abwaertskompatibel. Und wer zu diesem Zeitpunkt "Microsoft
C" lernt, schreibt Programme, die garantiert auf UNIX portabel sind.
Nur die UNIXer muessen wissen, dass ihre Programme nicht garantiert
auf MS portabel sind. So moechten wir's doch haben ;-)
Und wer kommerziell arbeitet, der kauft sich ein Mathe-Pack, auf dem
er wirklich alle Typen hat, die er braucht (eine Primzahl wie 10^937+1
wird er ohne eigene Typen so und so nicht als Integer darstellen können),
das ihm auch noch die Skalierbarkeit auf alle Plattformen seiner Wahl
garantiert, also auch für den Mac und weiß was.
Ralf Muschall
2005-03-06 14:02:47 UTC
Permalink
Post by P. Latz-Halter
Und wer kommerziell arbeitet, der kauft sich ein Mathe-Pack, auf dem
er wirklich alle Typen hat, die er braucht (eine Primzahl wie 10^937+1
wird er ohne eigene Typen so und so nicht als Integer darstellen können),
das ihm auch noch die Skalierbarkeit auf alle Plattformen seiner Wahl
garantiert, also auch für den Mac und weiß was.
Für kleine Ansprüche an die Geschwindigkeit reicht die Integer.h. Für
besseres gibt es die GMP und dann noch die CLN von Bruno Haible.

Ralf
--
GS d->? s:++>+++ a+ C++++$ UL+++$ UH+ P++ L++ E+++ W- N++ o-- K- w--- !O M- V-
PS+>++ PE Y+>++ PGP+ !t !5 !X !R !tv b+++ DI+++ D? G+ e++++ h+ r? y?
Amicus
2005-03-06 16:05:55 UTC
Permalink
On Sun, 6 Mar 2005 12:01:52 +0100, "P. Latz-Halter"
Post by P. Latz-Halter
Und wer kommerziell arbeitet, der kauft sich ein Mathe-Pack, auf dem
er wirklich alle Typen hat, die er braucht (eine Primzahl wie 10^937+1
wird er ohne eigene Typen so und so nicht als Integer darstellen können),
das ihm auch noch die Skalierbarkeit auf alle Plattformen seiner Wahl
garantiert, also auch für den Mac und weiß was.
Wohl noch nie etwas von GMP gehört? Das braucht man nicht zu kaufen. Ist
frei erhältlich. (Haben wir hier einen kleinen Troll? :-)


A.


Ein wenig Nachhilfe für die Unbedarften:

GMP
---

GMP is a free library for arbitrary precision arithmetic, operating on
signed integers, rational numbers, and floating point numbers. There is
no practical limit to the precision except the ones implied by the
available memory in the machine GMP runs on. GMP has a rich set of
functions, and the functions have a regular interface.

The main target applications for GMP are cryptography applications and
research, Internet security applications, algebra systems, computational
algebra research, etc.

GMP is carefully designed to be as fast as possible, both for small
operands and for huge operands. The speed is achieved by using fullwords
as the basic arithmetic type, by using fast algorithms, with highly
optimized assembly code for the most common inner loops for a lot of
CPUs, and by a general emphasis on speed.

GMP is faster than any other bignum library. The advantage for GMP
increases with the operand sizes for many operations, since GMP uses
asymptotically faster algorithms.
P. Latz-Halter
2005-03-06 16:37:31 UTC
Permalink
Amicus schrieb
Post by Amicus
Wohl noch nie etwas von GMP gehört? Das braucht man nicht zu kaufen. Ist
frei erhältlich. (Haben wir hier einen kleinen Troll? :-)
GMP ist doch Müll, damit kann ich nicht mal anständig parallelisierte
Rechnungen auf meiner Cray (R) ausführen.
Post by Amicus
GMP
---
GMP is a free library for arbitrary precision arithmetic, operating on
signed integers, rational numbers, and floating point numbers. There is
no practical limit to the precision except the ones implied by the
available memory in the machine GMP runs on. GMP has a rich set of
functions, and the functions have a regular interface.
The main target applications for GMP are cryptography applications and
research, Internet security applications, algebra systems, computational
algebra research, etc.
GMP is carefully designed to be as fast as possible, both for small
operands and for huge operands. The speed is achieved by using fullwords
as the basic arithmetic type, by using fast algorithms, with highly
optimized assembly code for the most common inner loops for a lot of
CPUs, and by a general emphasis on speed.
GMP is faster than any other bignum library. The advantage for GMP
increases with the operand sizes for many operations, since GMP uses
asymptotically faster algorithms.
Amicus
2005-03-06 16:46:24 UTC
Permalink
On Sun, 6 Mar 2005 17:37:31 +0100, "P. Latz-Halter"
Post by P. Latz-Halter
GMP ist doch Müll, damit kann ich nicht mal anständig parallelisierte
Rechnungen auf meiner Cray (R) ausführen.
*lol* :-)


A.


P.S.
Aber Du sprichst durchaus ein interessantes Thema an: W e n n die
Multi-Core Prozessoren kommen (und das wir b a l d sein), wird es
interessant sein zu sehen, wie die "PC-Softwarewelt" drauf reagiert.
/Parallelisierung/ wird wohl d a s Thema der Zukunft sein - auch auf der
PC-Plattform.
P. Latz-Halter
2005-03-06 17:04:51 UTC
Permalink
Amicus schrieb
Post by Amicus
Post by P. Latz-Halter
GMP ist doch Müll, damit kann ich nicht mal anständig parallelisierte
Rechnungen auf meiner Cray (R) ausführen.
*lol* :-)
A.
P.S.
Aber Du sprichst durchaus ein interessantes Thema an: W e n n die
Multi-Core Prozessoren kommen (und das wir b a l d sein), wird es
interessant sein zu sehen, wie die "PC-Softwarewelt" drauf reagiert.
/Parallelisierung/ wird wohl d a s Thema der Zukunft sein - auch auf der
PC-Plattform.
Schon längst vorbereitet, das nennt man Multiple Threads Computing
und ist für Mehrprozessorsysteme (unter MS-Windows) seit 8+ (?)
Jahren realisiert, denn da gab es ja schließlich Server-Computer mit
vielen, vielen Prozessoren (bis 32), denen man einzelne Threads zuordnen
kann. Das geht bis zu einem Grad sogar automatisch, bedeutet aber in
keiner Weise ein intelligentes (algorythmisches) Parallelisieren, denn
darüber weiß der Compiler nichts, er kann nur die Benutzung ihm
bekannter Resourcen 'automatisch' parallelisieren.
Ist nur ein Prozessor in der Hardware, dann werden alle Threads
(geforkte Prozesse in Unix) in bekanntem Zeitscheiben-Multitasking
brav nacheinander abgearbeitet, genau so wie alle Prozesse, also
Programme, die MS-Windows gestartet hat. Multiple Threads
Computing ist gängige Praxis, wenn du eine Process-Viewer
bemühst, dann kannst du das sehen.
Amicus
2005-03-06 17:17:29 UTC
Permalink
On Sun, 6 Mar 2005 18:04:51 +0100, "P. Latz-Halter"
...bedeutet aber in keiner Weise ein intelligentes (algorythmisches)
Parallelisieren, denn darüber weiß der Compiler nichts...
Ja, eben. Aber genau d a s meinte ich hier. Ich bin gespannt darauf,
welche Auswirkungen auf die "Softwareproduktion" das Auftreten von
Multicore-Prozesoren (auf der PC-Plattform) haben wird. C unterstützt ja
s e l b s t "von Haus aus" Parallelprogrammierung nicht. (Es gibt aller-
dings ein Projekt namens ->Cilk. http://supertech.lcs.mit.edu/cilk/ :-)

Ich könnte mir vostellen, dass das früher oder später zu einem "boost"
der Sprachen führen wird, die Derartiges schon von Haus aus unterstützen
- dieser Prozess wird aber wohl eine Weile dauern. (Beinahe könnte man
von einem Paradigmenwechsel sprechen, meine ich.)


A.
P. Latz-Halter
2005-03-06 17:30:33 UTC
Permalink
Amicus schrieb
Post by Amicus
...bedeutet aber in keiner Weise ein intelligentes (algorythmisches)
Parallelisieren, denn darüber weiß der Compiler nichts...
Ja, eben. Aber genau d a s meinte ich hier.
Was denn, du kannst sofort bei IBM einen 32-Prozessor-Server
kaufen, der unter MS-Windows läuft.
Post by Amicus
Ich bin gespannt darauf,
welche Auswirkungen auf die "Softwareproduktion" das Auftreten von
Multicore-Prozesoren (auf der PC-Plattform) haben wird. C unterstützt ja
s e l b s t "von Haus aus" Parallelprogrammierung nicht.
Doch, habe ich doch gesagt: fork();
Post by Amicus
(Es gibt aller-
dings ein Projekt namens ->Cilk. http://supertech.lcs.mit.edu/cilk/ :-)
Ich könnte mir vostellen, dass das früher oder später zu einem "boost"
der Sprachen führen wird, die Derartiges schon von Haus aus unterstützen
- dieser Prozess wird aber wohl eine Weile dauern. (Beinahe könnte man
von einem Paradigmenwechsel sprechen, meine ich.)
Nein, ganz, ganz viele Software forked oder macht Multithreading
(weil das gewisse Eleganzen erlaubt), und die Algorithmiker befassen
sich auch seit Jahrzehnten u n e n t w e g t mit Paralellisierung.
P. Latz-Halter
2005-03-06 17:42:29 UTC
Permalink
Amicus schrieb

[...]

Hast du Windows am Laufen?
P. Latz-Halter
2005-03-06 17:53:51 UTC
Permalink
Amicus schrieb
[...]

Falls du gerade MS-Windows laufen hast, dann

mach mal den Task-Manager auf, mit Ctrl-Alt-Del.
Dann im Menü unter <Ansicht-Spalten auswählen...>
das Auswahlfeld <Threadanzahl> anklicken.
Nun den Registerkarte <Prozesse> auswählen und das
gesamte Dialogfenster groß genug machen, so daß du
ganz rechts die Anzahl der Threads, die jeder
Prozess aufmacht, sehen kannst.

Wie du siehst, sind 20 oder auch 50 Threads nichts
besonderes. Das sind _richtige_ Parallelprogramme...

Du kannst auch noch die oben die Hilfe vom
Task-Manager anklicken und im Hilfethema
<Zuweisen von Prozessoren> lesen, wie das
mit dem Task-Manager ginge, wenn du mehr als
einen Prozessor auf dem Board hättest.
Stefan Nobis
2005-03-07 08:57:54 UTC
Permalink
Post by Amicus
On Sun, 6 Mar 2005 18:04:51 +0100, "P. Latz-Halter"
...bedeutet aber in keiner Weise ein intelligentes (algorythmisches)
Parallelisieren, denn darüber weiß der Compiler nichts...
Ja, eben. Aber genau d a s meinte ich hier.
Schau dir einfach die Forschung im Bereich paralleler Algorithmen
der letzten 30-40 Jahre an. Ist ja nun nicht so, als ob das
irgendwie etwas Neues sei.
Post by Amicus
Ich könnte mir vostellen, dass das früher oder später zu einem "boost"
der Sprachen führen wird, die Derartiges schon von Haus aus unterstützen
Dir ist schon klar, dass es bereits seit vielen Jahren etliche
solcher Sprachen gibt, oder? Nur mal so auf die schnelle zwei
Beispiele, nämlich Ada und Oz/Mozart (es gibt aber *deutlich*
mehr, ich habe jetzt allerdings keine Lust, für alle möglichen
Beispiele nachzuschauen, ob es nun offiziell zum Sprachstandard
gehört oder optionale Erweiterung oder externe Lib ist).

Oz finde ich übrigens besonders interessant, da Nebenläufigkeit
datenflussbasiert realisiert (und elementarer Bestandteil des
Sprachkerns) ist.
--
Stefan.
Amicus
2005-03-07 13:10:16 UTC
Permalink
Post by Stefan Nobis
Ich könnte mir vorstellen, dass das früher oder später zu einem "boost"
der Sprachen führen wird, die Derartiges schon von Haus aus unterstützen
Dir ist schon klar, dass es bereits seit vielen Jahren etliche
solcher Sprachen gibt, oder?
Sag mal, kann es sein, dass in Zeiten von Pisa die "Lesefähigkeit" auf
der Strecke geblieben ist?

Ja, das ist mir schon klar, was mir aber a u c h klar ist, ist, dass das
eben NICHT die Sprachen sind, in denen "man" typischerweise (auf der PC-
Plattform) programmiert.
Post by Stefan Nobis
Nur mal so auf die schnelle zwei Beispiele, nämlich Ada und Oz/Mozart
Hast schon viel in Ada und/oder Oz/Mozart _implementiert_?
Post by Stefan Nobis
Oz finde ich übrigens besonders interessant, da Nebenläufigkeit
datenflussbasiert realisiert (und elementarer Bestandteil des
Sprachkerns) ist.
Ja - d a v o n sprach ich ganz oben. :-)

Vielleicht geht's ja jetzt -beim zweiten Mal- besser:

"Ich könnte mir vorstellen, dass das früher oder später zu einem
/boost/ d e r Sprachen führen wird, d i e Derartiges schon von
Haus aus unterstützen [bzw. mitbringen]."


A.
Stefan Nobis
2005-03-07 14:35:42 UTC
Permalink
Post by Amicus
Ja, das ist mir schon klar, was mir aber a u c h klar ist, ist,
dass das eben NICHT die Sprachen sind, in denen "man"
typischerweise (auf der PC- Plattform) programmiert.
Java hat Nebenläufigkeit ebenfalls in die Sprache integriert (und
zwar so, wie es auch in Zukunft die Masse aller Sprache (u.a. auch
Ada) integrieren werden, nämlich als Standard-Lib).

Zudem war der Verweis auf die Forschung auch als Hinweis darauf
gedacht, dass sich bei weitem nicht alle Probleme (sinnvoll)
parallelisieren lassen. Noch kritischer ist der Umstand, dass die
Implementierungssprache für einen parallelen Algorithmus
eigentlich gar nicht so bedeutend ist -- insofern erwarte ich auch
keine nennenswerte Auswirkung der Parallelisierung der Hardware
auf Programmiersprachen (und ich beobachte die Entwicklung von
Programmiersprachen nun schon seit fast zwanzig Jahren mit regem
Interesse).

Wenn man weiterhin bedenkt, dass der Durchschnittsprogrammierer
mit fortgeschrittenen Konzepten wie funktionaler oder deklarativer
Programmierung nicht selten durchaus völlig überfordert ist und
die Industrie eigentlich nur Interesse an
Durchschnittsprogrammierern hat (denn die sind leicht ersetzbar),
halte ich deine Erwartungen für unwahrscheinlich.
Post by Amicus
Post by Stefan Nobis
Oz finde ich übrigens besonders interessant, da Nebenläufigkeit
datenflussbasiert realisiert (und elementarer Bestandteil des
Sprachkerns) ist.
Ja - d a v o n sprach ich ganz oben. :-)
Ich würde nahezu jede Wette eingehen, dass dieser Ansatz in den
nächsten 10 Jahren keinerlei Bedeutung/Einfluss im Mainstream (in
der Industrie) finden wird (und mit etwas weniger Sicherheit würde
ich den Zeitraum sogar verdreifachen).

Wirklich gute Sprachen, die auch die Produktivität nennenswert
verbessern können, gibt es viele. In den Mainstream hat es noch
keine geschafft.

Und Nebenläufigkeit kann man wirklich problemlos mit guten Libs,
siehe z.B. MPICH, erschlagen.

Ich würde mich freuen, wenn du Recht behalten solltest und ich
mich irre, aber glauben tue ich daran nicht.
--
Stefan.
Hans Joss
2005-03-06 16:42:21 UTC
Permalink
"Amicus" <***@gmx.de>

Hast du wieder mal deinen obligaten Bosheits-Anfall ?
Post by Amicus
(Haben wir hier einen kleinen Troll? :-)
Grosse Trolle sollen kleinen Trollen nicht deren Kleinheit vorwerfen.
Fremdgekautes zitieren ist kein Zeichen von Intelligenz.

Beschäftige lieber dein Gedankenfach
und rechen was:

==================================
Eine offene, kreisförmige 2-D Blumenblüte hat Blütenblätter,
welche der Schnittmenge zweier Kreise entsprechen
Länge der Blüten-Blätter 2 cm
Breite der Blüten-Blättere 1 cm
Die Blütenblätter sind Mitte-Mitte 2 cm auseinander.

Frage: Wie gross ist die Blumenblüte ?
==================================

Du darfst das ruhig in C berechnen.

mfg
Hans Joss
Amicus
2005-03-06 16:57:30 UTC
Permalink
On Sun, 6 Mar 2005 17:42:21 +0100, "Hans Joss" <***@hjp.ch> wrote:

Hallo Hans!
Post by Hans Joss
Beschäftige lieber dein Gedankenfach
==================================
Eine offene, kreisförmige 2-D Blumenblüte hat Blütenblätter,
welche der Schnittmenge zweier Kreise entsprechen
Länge der Blüten-Blätter 2 cm
Breite der Blüten-Blättere 1 cm
Die Blütenblätter sind Mitte-Mitte 2 cm auseinander.
Frage: Wie gross ist die Blumenblüte ?
==================================
Weißt Du was..., da kommt mir eine I d e e. Du könntest Deine kleinen
Rechenübungen durchaus als eigene Threads (in dsm) starten, so wie das
z. B. Rainer Rosenthal auch macht.

Sie würden dann auch die Aufmerksamkeit finden, die ihnen gebührt - und
das käme wohl allen hier zugute. Diese kleinen Aufgaben sind ja in der
Tat "on topic" (meine ich zumindest).

Allerdings hat das Ganze natürlich dann schon eher einen gewissen
"Rätsel-Charakter", wofür es meines Wissens eigene /Foren/ im Internet
gibt.

Es wäre aber allemal besser, Du postest derartige Mathe-bezogenen Bei-
träge, als irgendwelche Pamphlete, die hier nicht wirklich jemanden
interessieren.


A.


P.S.
Es entbehrt nicht einer gewissen Ironie, wenn der /Großmeister der
Bosheit/ hier jemandem einen "Bosheits-Anfall" vorwirft. :-)
Hans Joss
2005-03-06 17:16:32 UTC
Permalink
Post by Hans Joss
==================================
Eine offene, kreisförmige 2-D Blumenblüte hat Blütenblätter,
welche der Schnittmenge zweier Kreise entsprechen
Länge der Blüten-Blätter 2 cm
Breite der Blüten-Blättere 1 cm
Die Blütenblätter sind Mitte-Mitte 2 cm auseinander.
Frage: Wie gross ist die Blumenblüte ?
==================================
.... durchaus als eigene Threads ....
Keine Lust dazu.
Mache *du* das, wenn du willst.
Diese kleinen Aufgaben sind ja in der
Tat "on topic" (meine ich zumindest).
Und ?
Kannst *du* es berechnen ?

mfg
Hans Joss
Amicus
2005-03-06 17:19:41 UTC
Permalink
Post by Hans Joss
.... durchaus als eigene Threads ....
Keine Lust dazu.
Ok. Ein andermal vielleicht.
Post by Hans Joss
Mache *du* das, wenn du willst.
Achselzuck. Ist ja nicht auf /meinem/ Mist gewachsen...
Post by Hans Joss
Diese kleinen Aufgaben sind ja in der
Tat "on topic" (meine ich zumindest).
Und ?
Kannst *du* es berechnen ?
Keine Ahnung. Hab's mir noch nicht (näher) angesehen. Später vielleicht.


A.
Hans Joss
2005-03-06 17:30:27 UTC
Permalink
Post by Amicus
Achselzuck. Ist ja nicht auf /meinem/ Mist gewachsen...
Solcherart Blumen wächsen bei mir.
Post by Amicus
Post by Hans Joss
Und ?
Kannst *du* es berechnen ?
Keine Ahnung.
Es sieht so aus.

mfg
Hans Joss
Amicus
2005-03-06 16:18:53 UTC
Permalink
Post by Horst Kraemer
Ist doch ueberhaupt kein Problem. Beide Systeme sind auf der eigenen
Plattform abwaertskompatibel. Und wer zu diesem Zeitpunkt "Microsoft
C" lernt, schreibt Programme, die garantiert auf UNIX portabel sind.
Nur die UNIXer muessen wissen, dass ihre Programme nicht garantiert
auf MS portabel sind. So moechten wir's doch haben ;-)
Tja, MS hat es immer schon verstanden, "kluge Entscheidungen" zu fällen,
wenn es um die "Kompatibilität" mit UNIX-Systemen ging:

Pfadnamen: "\" statt "/"

Zeilenvorschub: "\r\n" statt "\n"

Alles Dinge, die das Leben eines Programmierers "leichter" machen...


A.
Amicus
2005-03-05 17:42:29 UTC
Permalink
Hüstel...

Wobei man hier dann auch schreiben sollte:


temp = (long) x * y*y * z*z*z;


A.
Stefan Ram
2005-03-05 17:54:42 UTC
Permalink
Post by Amicus
temp = (long) x * y*y * z*z*z;
Ich hatte da zunächst irrtümlich irgendwo Additionszeichen
gesehen. Wenn dort überall multipliziert wird, so gilt
natürlich ld( 60 ) ~ 5,90 bit, und 6 * 5,90 bit ~ 35.4 bit.

Man bräuchte also ohne Vorzeichen ca 36 bit, da reicht dann
nicht einmal "long", man müßte vielmehr "long long" nehmen, für
das in C garantiert wird, daß LLONG_MAX mindestens
9223372036854775807 ist.
Amicus
2005-03-05 18:11:10 UTC
Permalink
Post by Stefan Ram
Ich hatte da zunächst irrtümlich irgendwo Additionszeichen
gesehen. Wenn dort überall multipliziert wird, so gilt
natürlich ld( 60 ) ~ 5,90 bit, und 6 * 5,90 bit ~ 35.4 bit.
Hmmm... Wobei wir hier natürlich die Einschränkung:

x + y + z == 60

haben. D. h. x,y,z können (bei der Berechnung von x * y*y * z*z*z) nicht
alle _gleichzeitig_ der Wert 60 annehmen. Aber es ist schwer die "Aus-
wirkung" dieser Einschränkung auf einen Blick auzuschätzen.

Auf der "sicheren Seite" liegt man natürlich mit long long - nur gut,
dass es diesen Typ in C99 gibt! :-)
Post by Stefan Ram
Man bräuchte also ohne Vorzeichen ca 36 bit, da reicht dann
nicht einmal "long", man müßte vielmehr "long long" nehmen, für
das in C garantiert wird, daß LLONG_MAX mindestens
9223372036854775807 ist.
C99-Programm:

#include <stdio.h>

int main(void)
{
int x, y, z, xmax, ymax, zmax;
long long temp, max = 0;

for (x = 0; x <= 60; x++)
for (y = 0; y <= 60; y++)
for (z = 0; z <= 60; z++)
{
if (x + y + z == 60)
{
temp = (long long) x * y*y * z*z*z;

if (temp > max)
{
max = temp;

xmax = x;
ymax = y;
zmax = z;
}
}
}

printf("x = %d\ny = %d\nz = %d\n", xmax, ymax, zmax);

return 0;
}


So, jetzt is aber gut! ;-)


A.
Stephan Bielicke
2005-03-05 17:42:17 UTC
Permalink
Hallo,
Post by Amicus
#include <stdio.h>
int main(void)
{
int x, y, z, temp, xmax, ymax, zmax, max = 0;
woher beziehst du die Information, dass ganzzahlige Lösungen gesucht sind?
Post by Amicus
for (x = 0; x <= 60; x++)
und dann sogar nicht negative und...?

Gruß
Stephan
Amicus
2005-03-05 17:47:57 UTC
Permalink
On Sat, 5 Mar 2005 18:42:17 +0100, "Stephan Bielicke"
Post by Stephan Bielicke
woher beziehst du die Information, dass ganzzahlige Lösungen gesucht sind?
und dann sogar nicht negative und...?
*grins* Auch wieder wahr! :-) Also habe ich die Aufgabe zumindest unter
der Voraussetzung x,y,z e IN gelöst. ;-)


A.
Amicus
2005-03-05 20:22:01 UTC
Permalink
Post by Amicus
Post by Stephan Bielicke
woher beziehst du die Information, dass ganzzahlige Lösungen gesucht sind?
*grins* Auch wieder wahr! :-) Also habe ich die Aufgabe zumindest unter
der Voraussetzung x,y,z e IN gelöst. ;-)
Immerhin liefert das folgende Programm immer noch das gleiche
(ganzzahlige) Ergebnis:

#include <stdio.h>
#include <math.h>

int main(void)
{
double x, y, z, xmax = 0.0, ymax = 0.0, zmax = 0.0;
double temp, max = 0.0;

for (x = 0; x <= 60; x = x + 0.1)
for (y = 0; y <= 60; y = y + 0.1)
for (z = 0; z <= 60; z = z + 0.1)
{
if (fabs(x + y + z - 60.0) < 0.0001)
{
temp = x * y*y * z*z*z;

if (temp > max)
{
max = temp;

xmax = x;
ymax = y;
zmax = z;
}
}
}

printf("x = %f\ny = %f\nz = %f\n", xmax, ymax, zmax);

return 0;
}


A.
P. Latz-Halter
2005-03-05 20:46:53 UTC
Permalink
Amicus schrieb
Post by Amicus
Immerhin liefert das folgende Programm immer noch das gleiche
#include <stdio.h>
#include <math.h>
int main(void)
{
double x, y, z, xmax = 0.0, ymax = 0.0, zmax = 0.0;
double temp, max = 0.0;
for (x = 0; x <= 60; x = x + 0.1)
for (y = 0; y <= 60; y = y + 0.1)
for (z = 0; z <= 60; z = z + 0.1)
{
if (fabs(x + y + z - 60.0) < 0.0001)
{
temp = x * y*y * z*z*z;
if (temp > max)
{
max = temp;
xmax = x;
ymax = y;
zmax = z;
}
}
}
printf("x = %f\ny = %f\nz = %f\n", xmax, ymax, zmax);
return 0;
}
Das Program benötigt kein Fließkommagleichheitszeichen, wofür
es (änderbar) intern nur ein möglichst kleines EPSILON geben
kann und gibt. In C mir Fließkommazahlen (float, double) herum
zu machen ist gar nicht so trivial.

Aber c macht Spass, klar.

Wenn man wirklich sicher und professionell ein Optimum finden will,
dann sollte man das zuerst mal mit dem Solver von Excel versuchen.
P. Latz-Halter
2005-03-05 20:47:50 UTC
Permalink
Amicus schrieb
Post by Amicus
Immerhin liefert das folgende Programm immer noch das gleiche
#include <stdio.h>
#include <math.h>
int main(void)
{
double x, y, z, xmax = 0.0, ymax = 0.0, zmax = 0.0;
double temp, max = 0.0;
for (x = 0; x <= 60; x = x + 0.1)
for (y = 0; y <= 60; y = y + 0.1)
for (z = 0; z <= 60; z = z + 0.1)
{
if (fabs(x + y + z - 60.0) < 0.0001)
{
temp = x * y*y * z*z*z;
if (temp > max)
{
max = temp;
xmax = x;
ymax = y;
zmax = z;
}
}
}
printf("x = %f\ny = %f\nz = %f\n", xmax, ymax, zmax);
return 0;
}
Das Program benötigt kein Fließkommagleichheitszeichen, wofür
es (änderbar) intern nur ein möglichst kleines EPSILON geben
kann und gibt. In c mit Fließkommazahlen (float, double) herum
zu machen ist gar nicht so trivial.

Aber c macht Spass, klar.

Wenn man wirklich sicher und professionell ein Optimum finden will,
dann sollte man das zuerst mal mit dem Solver von Excel versuchen.
Christian Kortes
2005-03-05 20:51:06 UTC
Permalink
Post by P. Latz-Halter
Wenn man wirklich sicher und professionell ein Optimum finden will,
dann sollte man das zuerst mal mit dem Solver von Excel versuchen.
LOL.
Amicus
2005-03-05 21:07:08 UTC
Permalink
Post by P. Latz-Halter
Wenn man wirklich sicher und professionell ein Optimum finden will,
dann sollte man das zuerst mal mit dem Solver von Excel versuchen.
LOL.
Hans Joss hat sich offenbar ein Pseudonym zugelegt. :-)


A.
Amicus
2005-03-05 21:05:52 UTC
Permalink
On Sat, 5 Mar 2005 21:47:50 +0100, "P. Latz-Halter"
Post by P. Latz-Halter
Post by Amicus
if (fabs(x + y + z - 60.0) < 0.0001)
Das Program benötigt kein Fließkommagleichheitszeichen, wofür
es (änderbar) intern nur ein möglichst kleines EPSILON geben
kann und gibt.
Wie meinen? :-o
Post by P. Latz-Halter
In C mit Fließkommazahlen (float, double) herum zu machen ist
gar nicht so trivial.
Aber auch nicht allzuschwierig, wie Du siehst. (Außerdem dürfte das
Problem keineswegs nur auf C beschränkt sein.)

Wie auch immer, der folgende Vergleichsausdruck funktiniert natürlich
n i c h t (wenn x,y,z double bzw. float Variable sind):

if (x + y + z == 60.0)
Post by P. Latz-Halter
Wenn man wirklich sicher und professionell ein Optimum finden will,
dann sollte man das zuerst mal mit dem Solver von Excel versuchen.
*lol*


A.
Amicus
2005-03-05 19:32:36 UTC
Permalink
On Sat, 5 Mar 2005 18:42:17 +0100, "Stephan Bielicke"
Post by Amicus
for (x = 0; x <= 60; x++)
und dann sogar nicht negative...?
Diese Annahme kann man treffen, weil die Aufgabe sonst "unsinnig" würde.

Angenmommen negative Werte wären zulässig. Wähle x = a, y = -a, z = 60.
mit a > 0. Dann gilt

x + y + z = 60.

Und

x * y^2 * z^3

wäre

a^3 * 60^3.

Das würde mit wachsendem a beliebig groß werden. Man könnte als dann
k e i n e x,y,z angeben für die x * y^2 * z^3 maximal ist.


A.


P.S.
Was die ganzzahlige Lösung betrifft, bin ich wohl schon durch die
Zahlentheorie zu sehr "biased".
Franz Lemmermeyer
2005-03-05 22:27:14 UTC
Permalink
Post by Jens Feldkamp
Hallo noch mal!
Ich habe noch ein weiteres Problem, fürchte aber, dass ich da einfach
x+y+z`
x*y^2*z^3 soll maximal werden.
das schreit ja geradezu nach der ungleichung
zwischen geometrischem und arithmetischen mittel.
schauen wir uns erst einmal was einfacheres an:
x+y = c; maximiere xy^2.

Dazu maximieren wir 2xy^2, und nach AGM gilt
2xy^2 = (2x)(y)(y) <= [(2x+y+y)/3]^3.

Der Rest sollte nun eigentlich klar sein.

franz
--
Immer auf dem aktuellen Stand mit den Newsgroups von freenet.de:
http://newsgroups.freenet.de
Hans Joss
2005-03-05 17:14:38 UTC
Permalink
Post by Jens Feldkamp
x+y+z=60
x*y^2*z^3 soll maximal werden.
Jeder versucht es auf seine Art.

Loading Image...


mfg
Hans Joss
Amicus
2005-03-05 21:08:40 UTC
Permalink
Post by Hans Joss
Post by Jens Feldkamp
x+y+z=60
x*y^2*z^3 soll maximal werden.
Jeder versucht es auf seine Art.
http://www.hjp.ch/texte/Physik/Bld/Math/xyz.gif
Sieht gut aus!


A.
Hans Joss
2005-03-06 10:19:30 UTC
Permalink
Post by Amicus
Post by Hans Joss
Post by Jens Feldkamp
x+y+z=60
x*y^2*z^3 soll maximal werden.
http://www.hjp.ch/texte/Physik/Bld/Math/xyz.gif
Sieht gut aus!
Loading Image...
Loading Image...

Kurven zeigen viel mehr als Formeln,
Analysis-Angaben und Zahlenlisten.

mfg
Hans Joss
Loading...