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

zapis inżynierski

Ostatnio zmodyfikowano 2016-11-16 18:16
Autor Wiadomość
andrzejek97
Temat założony przez niniejszego użytkownika
zapis inżynierski
» 2016-11-12 13:49:58
Witam, mam pewien problem, nie wiem jak zapisać łańcuch formatujący  dla instrukcji printf tak aby wyświetlała ona zmienna typu double w zapisie inżynierskim, wiem, że dla zapisu naukowego byłoby to %e, nie wiem natomiast co zrobić, aby w wykładniku była zawsze wielokrotność trójki.
P-153606
DejaVu
» 2016-11-13 10:13:15
A jest w ogóle taki?
P-153624
Rashmistrz
» 2016-11-13 15:21:31
A jest w ogóle taki?
Tak: Notacja naukowa - postać inżynierska

Często w szkole niskiej i średniej używa się
inżynierskiej uproszczonej używając przedrostków układu SI.
P-153634
DejaVu
» 2016-11-15 16:02:27
@Rashmistrz: miałem na myśli to, czy jest w ogóle możliwość zmiany podstawy notacji naukowej.
P-153740
Rashmistrz
» 2016-11-15 23:25:42
@DejaVu:
czy jest w ogóle możliwość zmiany podstawy notacji naukowej.
Najczęściej zmienia się go pod konkretny system liczbowy.
Dla dziesiętnego jest to dziesięć, ale dla szesnastkowego
dziesięć już nie będzie pasowało. Dlatego dla szesnastkowego
jest szesnaście. Dla ósemkowego osiem, dla trójkowego trzy, dla dwójkowego dwa.
Czyli kolejno zapisane dla tych systemów podstawy: 1010, 1016, 108, 103, 102, ...

Jednak nie można zmieniać podstawy w notacji wykładniczej
na inną niż baza aktualnie wykorzystywanego systemu liczbowego,
bo założeniem jest, że wykładnik jest liczbą całkowitą,
a my potrzebowalibyśmy wykładnika rzeczywistego wtedy.

W postaci inżynierskiej podstawa nie ulega zmianie, a założeniem jest,
że wykładnik jest wielokrotnością lub podwielokrotnością liczby 3.

To wymaga od nas znormalizowania mantysy tej notacji do przedziału [1,1000).

Nigdy nie spotkałem się z taką możliwością
formatowania liczby w bibliotece standardowej C++.

 
P-153766
DejaVu
» 2016-11-16 17:43:05
Grunt to wymyślać głupie wartości i nazywać je jako nazwą własną. Równie dobrze można by było liczbę PI zrobić jako podstawę i nazwać to jakoś :)
P-153784
Gibas11
» 2016-11-16 17:51:12
@UP Notacja π-nżynierska? :D

//edit: O takie coś Ci chodziło? Nie siedzę w C, więc to C++, ale przepisanie tego nie powinno być straszne.
C/C++
#include <iostream>
#include <string>

std::string someUselessNotation( double number ) {
    double base = number;
    int index = 0;
   
    while( base > 1000.0 ) {
        base /= 1000;
        index += 3;
    }
    if( index == 0 ) {
        while( base < 1.0 ) {
            base *= 1000;
            index -= 3;
        }
    }
   
    auto baseString = std::to_string( base );
    auto indexString = std::to_string( index );
   
    /* Usunięcie śmieciowych zer, ew. kropki */
    baseString.erase( baseString.find_last_not_of( '0' ) + 1, std::string::npos );
    if( baseString.back() == '.' )
         baseString.pop_back();
   
    if( index == 0 )
         return baseString;
    else
         return baseString + "e" + indexString;
   
}

int main() {
    while( true ) {
        double i = 0;
        std::cin >> i;
        std::cout << someUselessNotation( i ) << std::endl;
    }
   
    return 0;
}

//edit: W sumie nie wiem dlaczego pomyślałem, że w notacji inżynierskiej normalizuje się jakieś liczby do przedziału [0, 1], w każdym razie trochę to poprawiłem. ;-;
P-153786
Rashmistrz
» 2016-11-16 17:54:31
Grunt to wymyślać głupie wartości i nazywać je jako nazwą własną.
Równie dobrze można by było liczbę PI zrobić jako podstawę i nazwać to jakoś :)
1. Nikt nie zabrania "twórczości".
2. Możesz nazwać swoje "twory" jak chcesz.
3. Czy ich się nazwa przyjmie i będzie
    powszechnie używana to nie moja sprawa.
5. Opisywany przez autora zapis istnieje i jest w użyciu.
6. To wciąż będzie modyfikacja lub inna wersja notacji naukowej.
7. Dokładnie...
P-153788
« 1 » 2
  Strona 1 z 2 Następna strona