2013-08-03 2 views
-8

Как умножить 2 числа, которые больше максимального предела i.e 1.89731e+4932 из long double с использованием C++/C, например. 2.79654E+25678 и 3.89574e+35890 ...умножить на 2 числа, которые больше максимального предела длинного двойного

+2

где ваша попытка ?? –

+0

Я не могу понять, как это сделать .. это вопрос о назначении и плохое решение для него – rajat

+4

заданий следует пытаться ... Они выдаются по какой-то причине. –

ответ

2

Там вы две возможности (C# примеры):

Вы можете использовать BigInteger (это, кажется неэффективным в самом вашем случае, но удобная с большим числом точности)

BigInteger a = 279654 * BigInteger.Pow(10, 25678 - 5); // <- 2.79654E25678 = 279654E25678 * 1E-5 
BigInteger b = 389574 * BigInteger.Pow(10, 35890 - 5); // <- 3.89574E35890 = 389574E35890 * 1E-5 
BigInteger result = a * b; 

Вы можете управлять мантисс и exponentas separatedly:

Double mantissaA = 2.79654; 
int exponentA = 25678; 

Double mantissaB = 3.89574; 
int exponentB = 35890; 

Double mantissaResult = mantissaA * mantissaB; 
int exponentResult = exponentA + exponentB; 

// Let's adjust mantissaResult, it should be in [1..10) (10 is not included) range 
if ((mantissaResult >= 10) || (mantissaResult <= -10)) { 
    mantissaResult /= 10.0 
    exponentResult += 1; 
} 
else if (((mantissaResult < 1) && (mantissaResult > 0)) || ((mantissaResult > -1) && (mantissaResult < 0))) { 
    mantissaResult *= 10.0 
    exponentResult -= 1; 
} 

// Let's output the result 
String result = mantissaResult.ToString() + "E+" + exponentResult.ToString(); 

PS Часто в случае умножений удобнее использовать логарифмы и дополнения:

A * B -> Log(A) + Log(B) 
+0

@harold: Спасибо за улучшение; Я редактировал код, чтобы добавить корректировку мантиссы –

Смежные вопросы