myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » ABS berechnen ohne Wurzel, Quadrat und IF/THEN
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

ABS berechnen ohne Wurzel, Quadrat und IF/THEN

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Krumnix
myCSharp.de-Mitglied

Dabei seit: 16.03.2018
Beiträge: 88
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Schweiz


Krumnix ist offline

ABS berechnen ohne Wurzel, Quadrat und IF/THEN

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

hab hier einen Controller, welcher nur die Grundrechenarten unterstützt.
Nun würde ich gerne den absolut Betrag errechnen.

Da die Software nur Templates ermöglicht (was sowas ähnliches wir Funktionen wäre), diese aber als reines suchen/ersetzen funktionieren (bedeutet, dass das Programm nachher aus einer "Mega-Main" besteht) wird die Sache recht kompliziert.

Ich möchte das Template "ABS" erstellen und dieses auf in IF verwenden.
Daher ist das verwenden von IF im ABS Template nicht möglich ->
IF(.... IF(...)) -> Compilerfehler.

Jedoch erlaubt der Compiler das Rechnen in einer IF-Abfrage ->
IF (a+b >> 10)... -> Ok

Wie kann ich nur mit den Grundrechenarten ein ABS umsetzen?
30.03.2020 14:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.590
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das funktioniert nicht, nur mit den Grundrechenarten, denn  Betragsfunktion (abs) ist ja über eine Fallunterscheidung definiert.
Kennt die Software denn den ?-Operator:

C#-Code:
x >= 0 ? x : -x

?

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Th69 am 30.03.2020 14:36.

30.03.2020 14:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.993
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der ?-Operator ist auch nur Syntax-Zucker für ein if.
Nur mit Grundrechenarten aber sehe ich keine Chance. Wenn Bitoperationen gehen, dann schon.

LaTino
30.03.2020 14:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Krumnix
myCSharp.de-Mitglied

Dabei seit: 16.03.2018
Beiträge: 88
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Schweiz

Themenstarter Thema begonnen von Krumnix

Krumnix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bit-Schieben hab ich mir auch schon überlegt, aber wie kann ich das in einem Rutsch umsetzen, ohne die Möglichkeit der Zwischenspeicherung?
30.03.2020 15:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.379
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

30.03.2020 16:14 Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.651
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Krumnix,

für int

C#-Code:
private static int Abs(int v)
{
    int mask = v >> 4 * (32 - 1);
    return (v + mask) ^ mask;
}

(sollte sich auf "jede" Programmsprache übertragen lassen). Funktionieren tut es wegen der (binären) Darstellung von Ganzzahlen. Solange der µC eine Zweierkomplement-Darstellung für negative Zahlen verwendet, klappt das.

Edit: im Link von MrSparkle sind ähnlich Varianten.

Zitat:
ohne die Möglichkeit der Zwischenspeicherung?

Das verstehe ich nicht. Was meinst du damit?


mfG Gü
30.03.2020 16:17 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 03.06.2020 06:28