Forum » Programiranje » double v bitno in obratno? (c++)
double v bitno in obratno? (c++)
snow ::
Ja...počasi se bom spravil na pot k mojim polinomom, pa mi primankuje c++ znanja. Kako naj berem bite spremenljivke tipa double? In kako naj zadevo potem nazaj skupaj spravim?
Saj pri celih številih se da z bitshift in & igrat...ampak.
(Za firbče zakaj moram to znat: Kombiniral bom številke.)
Saj pri celih številih se da z bitshift in & igrat...ampak.
(Za firbče zakaj moram to znat: Kombiniral bom številke.)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
- spremenilo: snow ()
OwcA ::
Tole sicer govorim na pamet, ampak nekaj v tem smislu bi naj delalo (sledeča koda ni standardna!):
Skratka vzameš naslov doubla in ga preko void kazalca prirediš intu z enako bitno natančnostjo.
double d 17.5;
void *v = &d;
__int64 *i = v;
Skratka vzameš naslov doubla in ga preko void kazalca prirediš intu z enako bitno natančnostjo.
Otroška radovednost - gonilo napredka.
Zgodovina sprememb…
- spremenilo: OwcA ()
snow ::
Glede IEEE...
mi lahko nekdo tole razloži:
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1*4*1.625 = 6.5
10100000000000000000000 naj bi bilo 625 po kaki logiki?
Mogoče napaka tudi drugje, ampak mi pač ni jasno.
OwcA compiler javi error. Pravi da sem invalid. Oziroma, da je pretvorba invalid. Možno zelo da se da s kazalci kaj, ampak snow še tega ne zna najbolje.
mi lahko nekdo tole razloži:
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1*4*1.625 = 6.5
10100000000000000000000 naj bi bilo 625 po kaki logiki?
Mogoče napaka tudi drugje, ampak mi pač ni jasno.
OwcA compiler javi error. Pravi da sem invalid. Oziroma, da je pretvorba invalid. Možno zelo da se da s kazalci kaj, ampak snow še tega ne zna najbolje.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
OwcA ::
@snow: sem sedaj poskusil tudi prevesti in mi tole lepo dela:
Samo opzorilo, double predstavljen kot int ne bo ohranil vrednost.
double d = 17.3;
void *pV = &d;
int i = *static_cast<int*>(pV);
Samo opzorilo, double predstavljen kot int ne bo ohranil vrednost.
Otroška radovednost - gonilo napredka.
snow ::
Hm...če dam float namesto double dela.
Double si neke fore izmišljuje.
Pa nevem zakaj mora bit v IEEE razlagi 0 čist na levi 31 čist na desni. Sama zmeda. :>
Kak pa nazaj pretvorim?
Recimo da na podoben način...
Mam za izpis, da preverjam.
Double si neke fore izmišljuje.
Pa nevem zakaj mora bit v IEEE razlagi 0 čist na levi 31 čist na desni. Sama zmeda. :>
Kak pa nazaj pretvorim?
Recimo da na podoben način...
for(j=31;j<=0;j--){
bit=(1 >> j) & i;
bit = (bit) ? 1 : 0;
cout<<bit;
}
Mam za izpis, da preverjam.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Zgodovina sprememb…
- spremenilo: snow ()
jkui ::
predlagam naslednji test:
#include <stdio.h>
void bsize(int size)
{
printf("%d\n", 8 * size);
}
int main() {
bsize(sizeof(int));
bsize(sizeof(float));
bsize(sizeof(double));
return 0;
}
pri meni (gcc, linux, via c3) je to 32, 32, 64. torej double v int ne mores kar tako skonvertat. kvecjemu v dva inta. tole pa deluje za float:
#include <iostream>
#include <cstring>
int main() {
float x = 13.4;
std::cout << x << std::endl;
int y;
memcpy(&y, &x, sizeof(int));
std::cout << y << std::endl;
float z;
memcpy(&z, &y, sizeof(int));
std::cout << z << std::endl;
return 0;
}
sicer se ga da okol prnest z raznimi kombinacijami castov, sam tole zazihr deluje :).
#include <stdio.h>
void bsize(int size)
{
printf("%d\n", 8 * size);
}
int main() {
bsize(sizeof(int));
bsize(sizeof(float));
bsize(sizeof(double));
return 0;
}
pri meni (gcc, linux, via c3) je to 32, 32, 64. torej double v int ne mores kar tako skonvertat. kvecjemu v dva inta. tole pa deluje za float:
#include <iostream>
#include <cstring>
int main() {
float x = 13.4;
std::cout << x << std::endl;
int y;
memcpy(&y, &x, sizeof(int));
std::cout << y << std::endl;
float z;
memcpy(&z, &y, sizeof(int));
std::cout << z << std::endl;
return 0;
}
sicer se ga da okol prnest z raznimi kombinacijami castov, sam tole zazihr deluje :).
snow ::
Hop tole dela prav lepo.
Ko bi le še za double imel...
No bom pa z float naredil zadevo. Ni panike.
Hvala jkui!
Ko bi le še za double imel...
No bom pa z float naredil zadevo. Ni panike.
Hvala jkui!
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Zgodovina sprememb…
- spremenilo: snow ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Program za C++ jezikOddelek: Programska oprema | 2847 (1882) | popaj113 |
» | win api (c++)Oddelek: Programiranje | 2531 (1811) | Gundolf |
» | Pomnilnik in c++Oddelek: Programiranje | 2135 (1844) | Gundolf |
» | c++ datotekeOddelek: Programiranje | 4033 (3522) | Vesoljc |
» | C++ kot kaj shraniti program?Oddelek: Programiranje | 1228 (1061) | rasta |