[elektro] Béke poraira !
Szima Gábor
sygma at tesla.hu
Thu Oct 13 18:43:06 CEST 2011
On Thu, 13 Oct 2011, [UTF-8] Balázs Bámer wrote:
>>> Nem akarok flame wart
>> Attol meg lesz. :-)
>
> Lesz vagy nem lesz, leírom, mi volt.
> Doszos Borland C++-t használtam akkor, volt szám objektum, operator
> overloadinggal minden lényeges művelet. Beírtam a programba, hogy
> Szam a=new Szam(3);
> Szam b=new Szam(5.5);
> Szam c=a+b*2.3-a*b*(a+b/2);
Ez tenyleg lasabb, mivel objektumokat hozol letre feleslegesen.
C++ -ban is nyugodtan hasznalhatod a sima C-s megoldasokat:
double a = 3.0;
double b = 5.5;
double c=a+b*2.3-a*b*(a+b/2);
A leforditott kod gyakorlatilag ugyanaz lesz.
test.c, test.cc:
#include <stdio.h>
int main (void) {
double a = 3.0;
double b = 5.5;
double c=a+b*2.3-a*b*(a+b/2);
printf ("%f\n", c);
return 0;
}
gcc -s -O2 -o test test.c
gcc -s -O2 -lstdc++ -o testcc test.cc
test: 5628 byte
testcc: 5688 byte
./test
-79.225000
./testcc
-79.225000
test.c, test.cc:
int main (void) {
double a = 3.0;
double b = 5.5;
double c = 0;
int i;
for ( i = 0; i < 1000000000; i++ ) c+=a+b*2.3-a*b*(a+b/2);
printf ("%f\n", c);
return 0;
}
test: 5628 byte
testcc: 5688 byte
$ time test
-79225000000.729813
real 0m0.949s
user 0m0.948s
sys 0m0.004s
$ time ./testcc
-79225000000.729813
real 0m0.949s
user 0m0.948s
sys 0m0.000s
Most akkor csinald meg ezt egy numerikus osztallyal! :)
A sima C ismeri azt a par valtozotipust, ami lenyegeben ket alapveto
csoport (integer, float), a tobbi csak rizsa es ruzs. ;)
Ezzel bizonyos dolgokat nem tudsz csinalni, mert a int32_t tulcsordul, az
int64_t nem tud tizedeseket, a double pedig elcsalja a tizedeseket nagy
erteknel.
Ide "Arbitrary Precision Math Library" kell.
Numeric a = 3.000000000000000000000000000000000000000000000000000000000000000001;
Numeric b = 123456789.0000000000000000000000000000000000000000000000000000000001;
Numeric c = a+b;
-Sygma
More information about the Elektro
mailing list