Szerk.: Javascript verzió bővítve típus vizsgálattal:
function myround( x, ndigit = 3 ) {
var res = x;
if ( Number.isFinite( x )) {
if ( x == 0 ){
res = 0;
} else {
var n = Math.round( Math.log10( Math.abs( x )));
var n2 = ndigit - 1 - n;
if ( n2 < 0 ){ n2 = 0; }
var x2 = Math.pow( 10, n2 );
res = parseInt( x * x2 ) / x2;
}
}
return res;
}
- sinexton blogja
- A hozzászóláshoz be kell jelentkezni
- 312 megtekintés
Hozzászólások
12345.67 => 12300? (hulyen hangzik, elsore, de ugye ez 123*10^2 kene hogy legyen, mert minden szamot olyanna konvertalsz lenyegeben hogy ABC*10^N)
- A hozzászóláshoz be kell jelentkezni
Jogos, de a nagysagrend miatt kiirja a tizedespontig a szamot, akkor meg mar mindegy ha nem nulla van ott. Mondjuk en a legritkabb esetben nezek ra konkret szamokra,.de akkor jol jon.
- A hozzászóláshoz be kell jelentkezni
Ez alatt mit értesz? -> "legritkabb esetben nezek ra konkret szamokra"
- A hozzászóláshoz be kell jelentkezni
A szabadidomben egy regresszios/valsegillesztesi algoritmuson dolgozom, de foleg elmeleten. Altalaban tovabb tart kiszamolni az otletet es leprogramozni, mint osszehasonlitani a vegeredmenyt.
- A hozzászóláshoz be kell jelentkezni
Igenigen, csak ugye az eleg vicces tud lenni mikor valahol (cikkekben, muszaki leirasokban, stb) megadjak azt hogy valami biszbasz erteke +/- hibaja az nem mas mint 127683.4278 +/- 892.1139. Ez teljesen egyenerteku azzal mintha azt mondanad hogy, "hat, ez kabe szazhuszonhetezer-hatszaz, pluszminusz kilencszaz" :]
- A hozzászóláshoz be kell jelentkezni
Igen is es nem is, mert technikailag az atlag es az atlag varhato szorasa fuggetlenek. Viszonylag nehez megmondani, hogy a kerekitest pontosan hol kellene megtenni a szorason belul (egy vagy ket szigma, esetleg 0.001 szigma). Maskor meg nincs szoras sem, akkor tenyleg csak a kb. nyeses marad. De reszben emiatt a kerdes miatt irom a cikket, amirol beszeltunk (talan szilveszterkor), mert valahol mindig kerekiteni kell, aminek hatasa van a regressziora, es igy erdemes ra optimalizalni.
- A hozzászóláshoz be kell jelentkezni
-
- A hozzászóláshoz be kell jelentkezni
Logikus lehetne, de nekem a fenti verzióm a legkönnyebben (leggyorsabban) befogadható számomra. Tehát csak a tizedesekből veszek el. Még a fix lebegőpontos lehetne jó:
1.2345e-5
- A hozzászóláshoz be kell jelentkezni
Érdemes lehet tudni, hogy a 0.1 kettes számrándszerben nem ábrázolható pontosan, tehát round(0.1,ndigit=1)*10-1
sem feltétlenül lesz nulla.
- A hozzászóláshoz be kell jelentkezni
A "hasznos" digitet hagyatom meg vele, tehát a nullánál nagyobb digitekre számolom a kerekítést. Ezért round(0.1,ndigit=1) futása 0.1-et ad.
- A hozzászóláshoz be kell jelentkezni
Természetesen 0.1 lesz, csak nem egészen pontosan (ha kettes számrendszerben vagyunk). Ez általában nem látszik, kivéve, amikor igen.
- A hozzászóláshoz be kell jelentkezni
Igen, ez sajnos ilyen. Erre van például Ruby-ban a "BigDecimal" osztály, mely tetszőleges pontosságú aritmetika 10-es számrendszerben, lásd az oldal elején a pontosság összehasonlítást:
https://ruby-doc.org/stdlib/libdoc/bigdecimal/rdoc/BigDecimal.html
- A hozzászóláshoz be kell jelentkezni