Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wydajna praca na dużych liczbach.

Ostatnio zmodyfikowano 2009-11-11 16:19
Autor Wiadomość
Saint
Temat założony przez niniejszego użytkownika
Wydajna praca na dużych liczbach.
» 2009-11-11 14:13:07
Witam!

Mój problem polega na tym, że nie potrafię operować dużymi liczbami, a dostałem zadanie, w którym jedna ze zmiennych ma mieścić się w przedziale zmienna>=2 && zmienna<=10e17.
Więc trzeba napisać warunek sprawdzający tą zmienną i tutaj zaczynają się schody...

Po zastosowaniu tego kodu :
http://nopaste.gamedev.pl/?id=4789

Wyskakuje mi błąd: "integer constant is too large for ‘long’ type" w linii sprawdzania warunku.
Gdy zamienię liczbę na takie wyrażenie: "0e17" to kod kompiluje się, ale gdy wpiszę jakąś większą liczbę to program się zawiesza.

P-11499
malan
» 2009-11-11 14:42:56
Błąd występuje ponieważ w zmiennej typu 'int' można przechowywać wartości do (jeśli dobrze pamiętam) ok. 32 000. Zapoznaj się z tym artykułem.
P-11501
Saint
Temat założony przez niniejszego użytkownika
» 2009-11-11 15:04:10
@malan

Zmieniłem typ zmiennej na "long long int" i nadal ten sam błąd:
"integer constant is too large for ‘long’ type"

Kod:
http://nopaste.gamedev.pl/?id=4790
P-11502
malan
» 2009-11-11 15:51:50
Chyba już wiem ;p.
Zamień sobie '1 000 000 000 000 000' na notację wykładniczą i wstaw ją do swojego programu (zamiast tej dużej liczby).

Zamienić możesz np. tak:
C/C++
#include <cstdio>
#include <cmath>

int main()
{
    printf( "%e", pow( 10, 15 ) ); // 10 ^ 15 = 1 000 000 000 000 000
   
    getchar();
    return 0;
}
 
P-11506
Elaine
» 2009-11-11 16:19:52
long long int, jako typ niestandardowy, nie jest brany pod uwagę przy dopasowywaniu typu literału:
ISO/IEC 14882:2003 napisał:
The type of an integer literal depends on its form, value, and suffix. If it is decimal and has no suffix, it has the first of these types in which its value can be represented: int, long int; if the value cannot be represented as a long int, the behavior is undefined.
Wtedy i tylko wtedy, gdy literał jest zakończony na ll, brany jest pod uwagę long long int. Ergo, zamień
1000000000000000
 na
1000000000000000LL
P-11507
« 1 »
  Strona 1 z 1