-2
私はC++でこの方程式を解こうとしています。BigNum/BigIntクラスC++で1 /(1/r1 + 1/r2)を解く
I長い長のサイズ制限に起因BigNum
クラスをしなければならなかった値の範囲に対応するために。現在、私のBigNum
クラスは整数だけをサポートしています。この方程式を整数だけで解くことはできますか?
コード
BigNum Parallel::getResistance(Resistor &r1, Resistor &r2) {
// TODO: Improve formatting of this
BigNum one("1");
BigNum bottom(
one.divide(r1.getResistance())
.add(
one.divide(r2.getResistance()))
.toString());
BigNum resistance (one.divide(bottom).toString());
return resistance;
}
そして
/**
MUST HAVE A DENOMINATOR IN LONG LONG RANGE...
todo: update this function to handle values outside of long long range
*/
BigNum BigNum::divide(BigNum &bn) {
string n = toString();
long long den = stoll(bn.toString());
long long rem = 0;
string result;
result.resize(MAX);
for (int indx = 0, len = n.length(); indx<len; ++indx) {
rem = (rem * 10) + (n[indx] - '0');
result[indx] = rem/den + '0';
rem %= den;
}
result.resize(n.length());
while (result[0] == '0' && result.length() != 1)
result.erase(0, 1);
if (result.length() == 0)
result = "0";
BigNum num(result);
return num;
}
誰もがhere is a link to the full project関心がある場合。
対処しなければならない抵抗の量に対して「長い間」(すなわち、19桁の大きさ)が不十分なモデリングはどのような回路ですか? –
@OliverCharlesworth:実際の質問は浮動小数点型を使用しない理由です( 'float'で十分でしょう)?抵抗値が0.001%の抵抗は、あまり使用されていないため、中間結果に 'double 'を使用すると、累積誤差でも問題はありません。私はこれを過剰設計したと呼ぶだろう。 – Olaf
そして、[完璧に良いライブラリ](https://gmplib.org/)があると、あなた自身がなぜロールを張るのですか? –