🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #11127

Re: problemas con C

#11127
From: Xavier Montero
Date: Sun, 30 Dec 2001 02:07
139 lines
5824 bytes
> Estoooo, el modulo es una operacion matematica con una definicion
> ligeramente distinta(*),

Ejem... el m�dulo (operaci�n) se define _s�lo_ para enteros y
se define _exactamente_ como el representante de una clase que
se define (la clase se define) como "los n�meros naturales que
tienen el mismo resto al dividir por el m�dulo (n�mero) del
anillo para el que operamos". Se elige como representante el
menor natural que cumple eso, y por definici�n de resto (que
siempre es positivo o cero y que nunca puede exceder o igualar
al cociente) coinciden... pero es que coinciden por definicion,
no porque sean cosas distintas.

> que coincide con el resto de la division
> _s�lo_ en el caso de los numeros naturales (enteros positivos)

C�mo se calcula el resto de "-23 / 5"? Debo decir "me guardo
el signo, divido 23 entre 5, caben a 4 y de resto 3 y luego
aplico signos?, es decir de resto -3"... o debo decir "caben
a -5 para obtener el m�ximo m�ltiplo de 5 menor o
igual que -23 (es decir, -25) y de resto 2".

Est� claro que en los naturales o cero, coincide. Est� claro
que para los racionales, irracionales e imaginarios no aplica,
porque no se define el m�dulo, y para los enteros negativos
coincidir� o no seg�n se defina:

--- 8< ------------------------------------------------
xavi@inspire:~/j$ g++ -lm modulus.c
xavi@inspire:~/j$ a.out
2       2       2
-2      -2      1
xavi@inspire:~/j$ cat modulus.c
#include <stdio.h>
#include <math.h>

void main(void)
{
        int a, b;
        int c, d;
        float quoscient;

        a = 5;
        b = 3;

        c = -5;
        d = 3;


        quoscient = (float)a / (float)b;

        printf("%d\t", a % b );
        printf("%d\t", a - (b * (int)quoscient));
        printf("%d\n", a - (b * (int)floor(quoscient)));

        quoscient = (float)c / (float)d;

        printf("%d\t", c % d );
        printf("%d\t", c - (d * (int)quoscient));
        printf("%d\n", c - (d * (int)floor(quoscient)));
}
xavi@inspire:~/j$
--- 8< ------------------------------------------------

Seg�n el g++, -5 m�dulo 3 da -2. Seg�n mi profesor de
�lgebra, -5 mod 3 da... veamos: m�dulo 3 indica
s�lo operar con los representantes de 0 a 2 (0, 1 y 2).

partimos de 0:
0 = 0

hacia arriba:

0 = 0
1 = 1
2 = 2
3 = 0 (m�dulo entero)
4 = 1
5 = 2
6 = 3 = 0
7 = 4 = 1
8 = 5 = 2
9 = 6 = 3 = 0
...

hacia abajo:

 0 = 0
-1 = 2
-2 = 1
-3 = 0
-4 = -1 =  2
-5 = -2 =  1
-6 = -3 =  0
-7 = -4 = -1 = 2

bien... pues seg�n mi profe de �lgebra (y yo comparto su forma
de verlo), -5 mod 3 = 1

Seg�n una definici�n de resto:
        printf("%d\t", c - (d * (int)quoscient));
-5 mod 3 da -2.

Seg�n la otra:
        printf("%d\n", c - (d * (int)floor(quoscient)));
-5 mod 3 da 1 (lo mismo que mi profe y yo decimos).

As� que si coincide o no depende de c�mo se definan las cosas...
Por ejemplo, est� claro que el C no tiene definido el m�dulo
como mi profe y yo tenemos (a mi no me puede salir un m�dulo
negativo jam�s y al C parece que s�), y el tema del resto...
depende del cristal con que se mire... depender� de c�mo
defina cociente... Si es el "menor valor que...", para m�,
-2 es menor que -1 y por tanto, para -5 mod 3, caben a -2,
-2 x 3 = -6, que hasta menos cinco da un resto de 1.
(y me dar� un resto que coincide en c�mo defino m�dulo).
Si se trata de definir el cociente como el "valor con menor
valor absoluto que..." entonces -1 tiene menor valor absoluto
que -2 y -5 entre 3 caben a -1 y de resto -2.

Para mi gusto particular, que cada uno se defina lo que quiera
como quiera, pero personalmente no le encuentro sentido
a definir un algoritmo para cocientes positivos y otro para
negativos, de modo que prefiero la primera definici�n que
define un �nico algoritmo de divisi�n entera, y en ambos
casos me da resultados (restos y m�dulos) positivos que siempre
coinciden.

En cualquier caso, lo que dices del ADA puede que vaya por
aqu�, en definir una u otra operaciones y ponerle un nombre
distinto, es decir una etiqueta ("resto" o "m�dulo") a una
y otra posibles definiciones. Supongo que estamos de acuerdo
en que se trata �nicamente de un problema de tener suficientes
nombres para suficientes operaciones y parece que tenemos
dos nombres (resto y m�dulo) para muchas m�s definiciones
posibles, �no?

Saludos!
Xavi.
Technical Details
Message-ID: <3C2E76D0.1959589E@dsitelecom.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!canoe.uoregon.edu!arclight.uoregon.edu!fr.usenet-edu.net!usenet-edu.net!fr.clara.net!heighliner.fr.clara.net!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail
References: <ab4993a4.0112141425.1c82dbad@posting.google.com> <3c222dcb@filemon.telecable.es> <3C228306.2972FE0A@dsitelecom.com> <251cb474.0112241016.15962dd2@posting.google.com> <3C2DE460.3E8E44A4@dsitelecom.com> <87adw1znoh.fsf@eb2ebu.ampr.org>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,108ef0ba0c562fe9
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-12-29 19:01:04 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!canoe.uoregon.edu!arclight.uoregon.edu!fr.usenet-edu.net!usenet-edu.net!fr.clara.net!heighliner.fr.clara.net!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail
From: Xavier Montero <xmontero@dsitelecom.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: problemas con C
Date: Sun, 30 Dec 2001 03:07:12 +0100
Organization: Digital Sound Items
Lines: 139
Message-ID: <3C2E76D0.1959589E@dsitelecom.com>
References: <ab4993a4.0112141425.1c82dbad@posting.google.com> <3c222dcb@filemon.telecable.es> <3C228306.2972FE0A@dsitelecom.com> <251cb474.0112241016.15962dd2@posting.google.com> <3C2DE460.3E8E44A4@dsitelecom.com> <87adw1znoh.fsf@eb2ebu.ampr.org>
NNTP-Posting-Host: 212.25.147.135
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: news.wanadoo.es 1009680868 12328 212.25.147.135 (30 Dec 2001 02:54:28 GMT)
X-Complaints-To: usenet@wanadoo.es
NNTP-Posting-Date: Sun, 30 Dec 2001 02:54:28 +0000 (UTC)
X-Mailer: Mozilla 4.77 [en] (Windows NT 5.0; U)
X-Accept-Language: en