[C] Program rozwiązujący pewną nierówność.
-
- Użytkownik
- Posty: 318
- Rejestracja: 18 paź 2015, o 17:31
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 265 razy
- Pomógł: 1 raz
[C] Program rozwiązujący pewną nierówność.
Dla jakich liczb naturalnych n prawdziwa jest nierówność:
\(\displaystyle{ 1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}>10}\)
Napisz program w C wyznaczający najmniejszą z takich liczb n.
Ma ktoś jakiś pomysł jakby można było to zrobić?
\(\displaystyle{ 1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}>10}\)
Napisz program w C wyznaczający najmniejszą z takich liczb n.
Ma ktoś jakiś pomysł jakby można było to zrobić?
[C] Program rozwiązujący pewną nierówność.
Czy studiujesz informatykę? Nieważne w jakim języku piszesz. Zwiększaj \(\displaystyle{ n}\) dopóki suma jest mniejsza lub równa \(\displaystyle{ 10.}\) To algorytm. Startujemy z \(\displaystyle{ n=1}\) i \(\displaystyle{ S=1}\). \(\displaystyle{ S}\) to ta suma po lewej.
- NogaWeza
- Użytkownik
- Posty: 1481
- Rejestracja: 22 lis 2012, o 22:24
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Podziękował: 147 razy
- Pomógł: 300 razy
[C] Program rozwiązujący pewną nierówność.
Będziesz musiał dodawać tutaj bardzo dużo tych liczb, żeby uzbierać te \(\displaystyle{ 10}\). Mogą powstać błędy, choć nie znam się na tyle na analizie numerycznej, żeby stwierdzić, czy te błędy mogę jakoś bardzo zniekształcić Twoją odpowiedź. Niemniej polecam
Kod: Zaznacz cały
https://pl.wikipedia.org/wiki/Algorytm_sumacyjny_Kahana
[C] Program rozwiązujący pewną nierówność.
Masz rację. Ale tu chyba chodziło o sam teoretyczny algorytm. Zamiast \(\displaystyle{ 10}\) równie dobrze można by wziąć \(\displaystyle{ 2}\).
Rozwiązanie w R
Dostaję \(\displaystyle{ n=12367}\). Teraz
Czy potraciły się bity i błędy się nałożyły - nie wiem.
Rozwiązanie w R
Kod: Zaznacz cały
n<-1
S<-1
while (S<=10){
n<-n+1
S<-S+1/n
}
n
Kod: Zaznacz cały
> sum(1/1:12366)
[1] 9.999962
> sum(1/1:12367)
[1] 10.00004
-
- Użytkownik
- Posty: 1931
- Rejestracja: 29 maja 2009, o 11:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 145 razy
- Pomógł: 320 razy
[C] Program rozwiązujący pewną nierówność.
Potwierdzam.szw1710 pisze:Dostaję \(\displaystyle{ n=12367}\). Teraz
Czy potraciły się bity i błędy się nałożyły - nie wiem.Kod: Zaznacz cały
> sum(1/1:12366) [1] 9.999962 > sum(1/1:12367) [1] 10.00004
Kod: Zaznacz cały
#include <stdio.h>
int main(void)
{
unsigned long int n = 0;
double sum = 0;
while(sum <= 10)
{
++n;
sum += 1.0/n;
}
printf("%lu", n);
return 0;
}
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[C] Program rozwiązujący pewną nierówność.
Aż tak dobrze nie ma, podwójna precyzja z IEEE 754 ma 15-16 cyfr dziesiętnych.kalwi pisze:Double ma 35 cyfr precyzji po przecinku
-
- Użytkownik
- Posty: 1931
- Rejestracja: 29 maja 2009, o 11:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 145 razy
- Pomógł: 320 razy
[C] Program rozwiązujący pewną nierówność.
O popatrz, zawsze mi się wydawało, że float ma 17 a double 35. Widocznie jednak to było 7 i 15. Dzięki za uwagę.