2013-04-13 94 views
1

我有XCode的一個problema編程時在C++中,任何幫助將好評:)EXC_BAD_ACCESS(碼= 1,地址= 0x1f400000010)

#include "TFloat.h" 
#include <math.h> 

TFloat::TFloat() 
{ 
_valor = 0.0; 
set_precision(52); 
recortar(); 
} 

TFloat::TFloat(size_t t) 
{ 
_valor = 0.0; 
set_precision(t); 
recortar(); 
} 

TFloat::TFloat(int i, size_t t) 
{ 
_valor = (double) i; 
set_precision(t); 
recortar(); 
} 

TFloat::TFloat(float f, size_t t) 
{ 
_valor = (double) f; 
set_precision(t); 
recortar(); 
} 

TFloat::TFloat(double f, size_t t) 
{ 
_valor = f; 
set_precision(t); 
recortar(); 
} 

double TFloat::dbl() const 
{ 
return _valor; 
} 

void TFloat::operator =(const TFloat& f) 
{ 
_valor = f._valor; 
_t = f._t; 
} 

void TFloat::operator =(const double& f) 
{ 
_valor = f; 
recortar(); 
} 

bool TFloat::operator ==(const TFloat& f) const 
{ 
return (_valor == f._valor); 
} 

TFloat TFloat::operator + (const TFloat& f) const 
{ 
double result = _valor + f._valor; 
    return TFloat(result, _t); 
} 

TFloat TFloat::operator - (const TFloat& f) const 
{ 
double result = _valor - f._valor; 
return TFloat(result, _t); 
} 

TFloat TFloat::operator * (const TFloat& f) const 
{ 
double result = _valor * f._valor; 
    return TFloat(result, _t); 
} 

TFloat TFloat::operator/(const TFloat& f) const 
{ 
double result = _valor/f._valor; 
return TFloat(result, _t); 
} 

TFloat TFloat::exponencial() const 
{ 
double result = exp(_valor); 
return TFloat(result, _t); 
} 

TFloat TFloat::operator+ (const double& f) const 
{ 
return this->operator+(TFloat(f,_t)); 
} 

TFloat TFloat::operator- (const double& f) const 
{ 
return this->operator-(TFloat(f,_t)); 
} 

TFloat TFloat::operator* (const double& f) const 
{ 
return this->operator*(TFloat(f,_t)); 
} 

TFloat TFloat::operator/(const double& f) const 
{ 
return this->operator/(TFloat(f,_t)); 
} 



void TFloat::recortar() 
{ 
bitset<64> * bits; 
bits = (bitset<64>*) &_valor; 

for(size_t i = 0 ; i < (52 - _t); i++) 
{ 
    (*bits)[i] = 0; 
} 
} 

而在此函數中使用 「recortar」 出現的問題:

TFloat::TFloat(double f, size_t t) 
{ 
    _valor = f; 
    set_precision(t); 
    recortar(); 
} 

當我做這個調用它的main.cpp:

size_t _precision = precision(51); 
TFloat Beta(0.0,_precision); 

我認爲這是一個記憶問題,但我不知道如何解決它。謝謝!

+1

你不能盲目地把一個double轉換成一個bitset。 –

+0

請製作一個[testcase](http://sscce.org) - 你期望如何調試_so many_ lines? –

+1

你已經忘記了'bitset'是一個複雜的類型!您不能簡單地將double的基礎位C-cast到「bitset」對象的基礎位。它不僅僅是一系列的值字節。 –

回答

1

起初你試圖用這個代碼實現什麼?
如前所述

bits = (bitset<64>*) &_valor; 

都不行,你可以初始化位集要麼用繩子方含0和1,或unsigned long類型保存位。使用浮點值進行位操作在任何情況下都沒有多大意義。
Here很好的解釋了不同類型的劇組是如何工作以及他們如何能夠和不可以使用的。

相關問題