Negierung von float Wert

Gast #1382223
Lesenswert?

Hallo,

ich benutze einen float Wert in AVR-gcc.

float x = 27.1285.

Funktioniert perfekt in der Verbindung mit sprintf....

Jetzt möchte ich den Wert negieren ? (-27.1285)
Aus der Doku weiss ich das mein float 32bit, also 4 byte gross ist.

Muss ich jetzt das oberste Bit einfach auf 1 setzen ?
das könnte ich ja mit:

x |= 0x8000;

Vielen Dank schon mal für einen Hinweis.

Gruß Pete
Gast #1382368
Lesenswert?

Stefan Ernst schrieb:

> Was ist denn an
>
> x = -x;
>
> nicht portabel?

Manchmal liegt das Naheliegende so fern (nämlich einfach ein
Minuszeichen vor die Variable zu schreiben) ;-)

Wer's undurchschaubar mag, kann natürlich auch
1
x = 1/(tan(atan(x)+M_PI/2))

schreiben. Das geht für fast alle x und stimmt wenigstens ungefähr ;-)
Moderator Persönliche Seite #1383209
Lesenswert?

A. K. schrieb:
> Der Exponent ist egal, weil das Vorzeichen in alle IEEE Formaten im
> höchsten Bit liegt.

Ja, stimmt.

> Aber die Byte-Order ist weniger einfach,

Normalerweise gibt's das als Makro in einem Headerfile, aber das
ist dann halt gerade bei AVR & Co nicht da.

> wenn man
> auch jene schrägen Varianten berücksichtigt, in denen zwar das untere
> Byte aber das obere Wort vorneweg kommt.
1
#if BYTE_ORDER == PDP_ENDIAN

:)

Ich glaube, das hat dieser Tage nur noch historische Relevanz.
Gast #4773321
Lesenswert?

Jörg W. schrieb:
> A. K. schrieb:

>> wenn man
>> auch jene schrägen Varianten berücksichtigt, in denen zwar das untere
>> Byte aber das obere Wort vorneweg kommt.
>
>
1
#if BYTE_ORDER == PDP_ENDIAN
>
> :)
>
> Ich glaube, das hat dieser Tage nur noch historische Relevanz.

Aber nur, weil man eine PDP-11 lieber in Assembler programmiert :)

http://www.theregister.co.uk/2013/06/19/nuke_plants_to_keep_pdp11_until_2050/
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.