unikanie postaci wykładniczej

unikanie postaci wykładniczej
B7
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:3
0

Witam Was!

Co należy zrobić aby wynik operacji matematycznej w konsoli c# przedstawiać w taki sposób, by wynik nie był w postaci wykładniczej, tzn cała liczba a nie jakaś np 5,1*10^16.

Pozdrawiam!

fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

A jak zrobić żeby liczba cyfr po przecinku nie była na sztywno zapisana tylko zmieniła się w zależności od potrzeby ?

Kopiuj
np. Console.WriteLine("{0:F} ", 5.1 * Math.Pow(10.0, 16.0));``` / wynik na konsoli  51000000000000000.00 

fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0
AK
Stare, sięgające jeszcze Fortranu, formatowanie 'G' (nie mające bezpośredniego odpowiednika w świecie C) ... łezka się kręci ...
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Formatowanie G daje postać wykładniczą 5, 1E + 16 a chodziło o to żeby wynik był w postaci dziesiętnej

edytowany 1x, ostatnio: Zimny Krawiec
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 dni
  • Postów:3561
0
Zimny Krawiec napisał(a):

Formatowanie G daje postać wykładniczą 5, 1E + 16 a chodziło o to żeby wynik był w postaci dziesiętnej

G jest "ratuj mnie jak możesz - jak nie możesz to wykładniczo". Żeby skontrastować: E jest zawsze wykładnicza (i zawsze się uda), F zawsze stałpopozycjna, jak się nie uda, to kaput.
Gdybym sam implementował 'G', to jednak E+16 nieco "cokolwiek" poza zakresem takiego sensowności formatowania liczb zmiennoprzecinkowych, ja bym już odrzucał.

BTW mówisz o wyniku zmiennoprzecinkowym, double albo float? Konwertowałeś do decimala?

Zimny Krawiec napisał(a):

np. Console.WriteLine("{0:F} ", 5.1 * Math.Pow(10.0, 16.0));``` / wynik na konsoli 51000000000000000.00

Oj Pow'a to bardzo cię proszę, nie używaj w takim kontekście


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Wynik takiego działania zawsze będzie double bo jaki inny może być ?

Porównaj :
Console.WriteLine("{0:G} ", double.MaxValue);
Console.WriteLine("{0:F} ", double.MaxValue);

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 dni
  • Postów:3561
0
Zimny Krawiec napisał(a):

Wynik takiego działania zawsze będzie double bo jaki inny może być ?

Porównaj :
Console.WriteLine("{0:G} ", double.MaxValue);
Console.WriteLine("{0:F} ", double.MaxValue);

1,79769313486232E+308
179769313486232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,00

Minimalnie za dużo obiecałem. Tym niemniej przykład pokazuje ilość cyfr sensowych. Gdybym to robił jakoś podobnie bym zdecydował. Prezentując te dwieście fałszywych zer czułbym się jak przestępca

Zrewanżuje się takim kodem, ale to tylko akademicko. Rzutując przez decimal nie przybędzie cyfr dokładnych. Temat jest niewłaściwie określony.

Kopiuj

 Console.WriteLine("{0:G} ", decimal.MaxValue );
 Console.WriteLine("{0:F} ", decimal.MaxValue );

EDIT. Zawsze mnie odrzucało, jak MS "przyjaźnie" drukował liczby zmiennoprzecinkowe (jak pamiętam MSVC++), na debugerze prezentując uczciwsze choć brzydsze.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
B7
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:3
0

Dzięki!;-) Spróbuję, chcę się jeszcze czegoś w życiu nauczyć :-)

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Wszystkich cyfr na konsoli było 311 : 1 + 308 i 2 po przecinku .
Łatwo sprawdzić. Trzeba zaznaczyć na konsoli i skopiować a następnie wkleić do stringu i odczyta właściwość Lenght

AK
OK, dwieście osiemdziesiąt kilka fałszywych zer. Jakbym umiał liczyć, bym nie został programistą ;)
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 dni
  • Postów:3561
0
basup74 napisał(a):

Dzięki!;-) Spróbuję, chcę się jeszcze czegoś w życiu nauczyć :-)

Całe życie, całe życie (i umieramy głupi). :)

F.p. ma dwa problemy. Pierwszy jest dość szeroko znany, dokładności. Drugi jest znany mniej, a tez ważny: reprezentacji. Nie każda liczba ułamkowa czy duża istnieje. Hipotetycznie po 123456789012.0 jest 123456789106.0


Bo C to najlepszy język, każdy uczeń ci to powie
B7
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:3
0

To prawda, Pod androidem na przykład jest taki sympatyczny kalkulatorek mobi calc;-) który potrafi w mgnieniu oka podnieść np 111^111 i mam wszystkie cyferki, a tak to postać wykładnicza to trochę jakby system na skróty szedł:-). Jak kiedyś chodziłem na politechnikę, w roku bodajże 1993, mieliśmy pascala i komputer, co prawda długo, ale policzył ogromne ciągi liczb:-)

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:8 dni
  • Postów:3561
0
basup74 napisał(a):

To prawda, Pod androidem na przykład jest taki sympatyczny kalkulatorek mobi calc;-) który potrafi w mgnieniu oka podnieść np 111^111 i mam wszystkie cyferki, a tak to postać wykładnicza to trochę jakby system na skróty szedł:-). Jak kiedyś chodziłem na politechnikę, w roku bodajże 1993, mieliśmy pascala i komputer, co prawda długo, ale policzył ogromne ciągi liczb:-)

Da się zaimplementować typy z dowolną ilością cyfr dokładnych. Milion lat temu (Jak nie było latwego dostępu internetem do wszystkiego) miałem C/C++ stałoprzecinkowy do starych złotych sprzed denominacji, potem konwersja na nowe złote. Dało się. Dodawanie, odejmowanie bajka, mnożenie, trudniej. Ponieważ to biznes, wystarczało mnożenie przez procent. Dzielenia do końca eksploatacji tej biblioteki nie było, nie było potrzeby.
Obecnie na pewno sa takie biblioteki, a nie miazłem powodu używać (decimale w językach wystarczają)


Bo C to najlepszy język, każdy uczeń ci to powie
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Zgadza się . Można takie typy liczbowe wymyślić ale obliczenia na takich typach mogą trwać bardzo długo.
Działania na liczbach typu double są podobno 10 razy szybsze niż działania na liczbach typu decimal.
Nie będę pisał z czego to wynika ale tak jest .

Ktoś kiedyś policzył ile czasu potrzebowałby najszybszy komputer aby obliczyć wszystkie kombinacje rozegrania pewnej gry .
Najszybszy komputer na świecie musiałby liczyć dłużej niż istnieje wszechświat
Komputery kwantowe - obecnie science fiction mogłyby poradzić sobie z takimi obliczeniami .

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)