Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 22:33

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



float zu int, was macht der Code?

Discussion on float zu int, was macht der Code? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
float zu int, was macht der Code?

Hi,

was ist der Unterschied zwischen diesem Code (value ist vom Typ float):
Code:
int FloatConstNode::intValue(){
	float flt=value;
	int temp;
	_control87( _RC_NEAR|_PC_24|_EM_INVALID|_EM_ZERODIVIDE|_EM_OVERFLOW|_EM_UNDERFLOW|_EM_INEXACT|_EM_DENORMAL,0xfffff );
	_asm{
		fld [flt];
		fistp [temp];
	}
	_control87( _CW_DEFAULT,0xfffff );
	return temp;
}
(von hier: )

und einem einfachen
Code:
return (int) value;
Was macht die Funktion genau / besonderes?
dowhile is offline  
Thanks
1 User
Old 08/19/2014, 00:02   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Die asm-Instruktionen laden flt auf den FPU Stack & speichern das oberste Element des FPU Stacks als Integer in temp.

_control87 setzt, soweit ich das verstanden habe, die Optionen für die FPU-Operationen, _EM_* steht dabei für Exceptions (Exception bei division by zero etc.), _PC_* für die Präzision und _RC_* für die Rundungsoptionen.

Der größte Unterschied dürfte der sein, dass (int)value wohl _RC_CHOP als Option verwendet, während _RC_NEAR auf- bzw. abrundet, je nachdem, ob der Float-Value > oder < .5 ist.

3.6 würde bei der ersten Methode also wohl 4 returnen, bei der zweiten Methode 3.
snow is offline  
Thanks
2 Users
Old 08/19/2014, 12:15   #3




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
geht nicht auch einfach
Code:
float Num = 1.325;
float Num_ = 1.525;
int iNum = 0;
int iNum_ = 0;
	iNum  = static_cast<int>(Num + 0.5);
	iNum_ = static_cast<int>(Num_ + 0.5);
also
Code:
int ConvertFloatToInt(float Number)
{
	return static_cast<int>(Number + 0.5);
}
bloodx is offline  
Old 08/19/2014, 13:56   #4
 
Padmak's Avatar
 
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
Oder einfach std::ceil/std::floor?

Padmak
Padmak is offline  
Old 08/29/2014, 03:32   #5
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Quote:
Originally Posted by bloodx View Post
geht nicht auch einfach
Code:
float Num = 1.325;
float Num_ = 1.525;
int iNum = 0;
int iNum_ = 0;
	iNum  = static_cast<int>(Num + 0.5);
	iNum_ = static_cast<int>(Num_ + 0.5);
also
Code:
int ConvertFloatToInt(float Number)
{
	return static_cast<int>(Number + 0.5);
}
Wenn ich mich nicht täusche wird bei so einem cast immer runtergerundet, war aber schon ein Jahr her, dass ich das das letzte mal gebraucht habe / es von Bedeutung für mich war ~~
Hiris is offline  
Old 08/29/2014, 11:09   #6

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Quote:
Originally Posted by Hiris View Post
Wenn ich mich nicht täusche wird bei so einem cast immer runtergerundet, war aber schon ein Jahr her, dass ich das das letzte mal gebraucht habe / es von Bedeutung für mich war ~~
deshalb hat er auch den Wert + 0.5 gecastet, damit z.B. 0.5 korrekt auf 1 aufgerundet wird, 0.49 aber eine 0 wird.
snow is offline  
Old 08/29/2014, 15:22   #7
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Quote:
Originally Posted by snow View Post
deshalb hat er auch den Wert + 0.5 gecastet, damit z.B. 0.5 korrekt auf 1 aufgerundet wird, 0.49 aber eine 0 wird.
Ach lol, da hatte ich wohl gestern Abend nen totalen brainlag

Ja passt natürlich
Hiris is offline  
Reply


Similar Threads Similar Threads
[Buying] [S] Xbox Live Gold Code [B] Macht Vorschläge
05/21/2013 - Consoles Trading - 3 Replies
Titel Sagt alles :$
[B] 20% Origin rabatt Code [S] Macht mir nen angebot
11/23/2011 - elite*gold Trading - 0 Replies
Wie schon gesagt habe einen Origin 20% Rabatt code der allerdings nicht für Vorbestellungen gilt ist noch bis zum 23.12.11 gültig.
[Frage]Gm Code Wie macht Mann sich Schneller?
04/04/2010 - Metin2 Private Server - 12 Replies
Also Ich Bin Noch Neu Und Hätte Eine Frage Wie macht mann sich schneller wenn man gm is ich hab in einen sammeltheread den code gefund Laufgeschwindigkeit erhöhen = /mspd 0 - 1000 Klappt aber nich recht (befehl nich gefunden) Wenn mir einer den fertigen code sagen könnte wäre dankbar und ihr bekommt nen THX... Hoffe Auf Eine Schnelle Antwort .. Thx Lg euer Blodyice:D
Captcha Code pls macht mir wer den!
05/03/2009 - Metin2 Private Server - 8 Replies
wen einer so net wäre und mie den Captcha Code mahen würde würde dem jenigen ein thx geben pls! http://img15.imageshack.us/img15/9287/getcode2.jp g mfg jacker455!:o



All times are GMT +1. The time now is 22:34.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.