Funkcja zaokragajaca wartosc??



Widzisz wersję archiwalną tematu "Funkcja zaokragajaca wartosc??" z forum pl.comp.lang.c





tricky - 24 Gru 2001, 10:27

Jaka jest funcja zaokraglajaca wartosc
np
0,999999 na 1
a 0,44444 na 0


Adam 'aimsoft' Michalski - 24 Gru 2001, 10:54

Jaka jest funcja zaokraglajaca wartosc
np
0,999999 na 1
a 0,44444 na 0




'Raf256' Rafal Maj - 24 Gru 2001, 11:25


Jaka jest funcja zaokraglajaca wartosc
np
0,999999 na 1
a 0,44444 na 0



(int)(x+0.5)


Irek "GPz" Zielinski - 24 Gru 2001, 16:20

(int)(x+0.5) dla x dodatniego -0.5 dla ujemnego :)

Pozdro !
Irek

-------------
home page:  http://www.geocities.com/irekz

motorcycle: Kawasaki GPz 500S
member of Amateur NETWORK - PSS NET -http://www.pss.z.pl



'Raf256' Rafal Maj - 24 Gru 2001, 18:02


(int)(x+0.5) dla x dodatniego -0.5 dla ujemnego :)



template <class typ
long long int RoundLL(typ x) {
  if (l0) return (long long int)(x+0.5);
  else return (long long int)(x-0.5);

}



oraz analogicznie dla zwykłego int (bez long long)


gruesome [Artur Siekielski] - 25 Gru 2001, 16:24

wtorek, 25 gru, 'Raf256' Rafal Maj:

| (int)(x+0.5) dla x dodatniego -0.5 dla ujemnego :)
template <class typ
long long int RoundLL(typ x) {
  if (l0) return (long long int)(x+0.5);
  else return (long long int)(x-0.5);
}
oraz analogicznie dla zwykłego int (bez long long)



Dlaczego przyjmujesz explicit, że wartością zwracaną ma być long long? Ogólnie
lepiej użyć funkcji z <cmathtakich jak std::abs czy std::llabs.
Wykorzystanie tutaj szablonu jest IMHO niezbyt logiczne - ten sposób
zaokrąglania ma sens w zasadzie wyłącznie dla typów wbudowanych - lepiej więc


Marek "Baczek" Baczyński - 26 Gru 2001, 13:01

'Raf256' Rafal Maj wyprodukowaÂł[ao]?:

| (int)(x+0.5) dla x dodatniego -0.5 dla ujemnego :)

template <class typ
long long int RoundLL(typ x) {
  if (l0) return (long long int)(x+0.5);
  else return (long long int)(x-0.5);
}



A nie proÂściej i lepiej:

/* ANSI C */
#include <math.h
int round(double foo) {return (int)floor(foo+0.5);}
// ISO C++
#include <cmath
inline int round(double foo) {return (int)std::floor(foo+0.5);}

Pozdrawiam,
Baczek


'Raf256' Rafal Maj - 26 Gru 2001, 19:43


'Raf256' Rafal Maj wyprodukował[ao]?:

| template <class typ
| long long int RoundLL(typ x) {
|   if (l0) return (long long int)(x+0.5);
|   else return (long long int)(x-0.5); }
A nie prościej i lepiej:
/* ANSI C */
#include <math.h
int round(double foo) {return (int)floor(foo+0.5);}
// ISO C++
#include <cmath
inline int round(double foo) {return (int)std::floor(foo+0.5);}



pościej ale gorzej, bo :
long long double d = 10.49999999999999999999999 /* ... */ ;
round(d);


Marcin 'Qrczak' Kowalczyk - 27 Gru 2001, 07:13


pościej ale gorzej, bo :
long long double d = 10.49999999999999999999999 /* ... */ ;
round(d);



Nie gorzej. Nie da się stwierdzić, czy to było 10.4999...
czy 10.5000... (dla wystarczająco dużej liczby 9 i 0).
Obie liczby mają taką samą najbliższą reprezentację w typie double.


Adam 'aimsoft' Michalski - 28 Gru 2001, 13:12



| pościej ale gorzej, bo :
| long long double d = 10.49999999999999999999999 /* ... */ ;
| round(d);

Nie gorzej. Nie da się stwierdzić, czy to było 10.4999...
czy 10.5000... (dla wystarczająco dużej liczby 9 i 0).
Obie liczby mają taką samą najbliższą reprezentację w typie double.



Fakt.

BTW. C/C++ naprawdę nie nadaje się do zastosowań numerycznych...


gruesome [Artur Siekielski] - 29 Gru 2001, 02:52

piątek, 28 gru, Adam 'aimsoft' Michalski:

| pościej ale gorzej, bo :
| long long double d = 10.49999999999999999999999 /* ... */ ;
| round(d);
| Nie gorzej. Nie da się stwierdzić, czy to było 10.4999...
| czy 10.5000... (dla wystarczająco dużej liczby 9 i 0).
| Obie liczby mają taką samą najbliższą reprezentację w typie double.
Fakt.
BTW. C/C++ naprawdę nie nadaje się do zastosowań numerycznych...



Sądzisz, że to, o czym mowa powyżej, dotyczy tylko C++?

C++: automatyczna konwersja t., funkcje konwersji
Problemy z funkcja 'strcat'
Ochrona przed wywolaniem nieistniejacych funkcji w starych DLL-ach
Wymiana danych pomiedzy socket`ami ( funkcja RECV() i SEND()) - pilne :(
  • hannah nydahl sick0D0A 5
  • chce kupic passata b4
  • przepisow na przetwory
  • mrozic;rybe;po;grecku
  • klisze kodak i fuji
  • realspeak do pobrania
  • encomium emmae reginae
  • szablon do winietek
  • naczynia polaczone w szambie
  • Kolekcja tematów z for internetowych ^^ Strona Główna