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

double i folat różnice miedzy unix windows

Ostatnio zmodyfikowano 2015-01-23 11:41
Autor Wiadomość
NiceFox
Temat założony przez niniejszego użytkownika
double i folat różnice miedzy unix windows
» 2015-01-21 09:29:18
Może ktoś jest w temacie i mi wyjaśnić jaka jest różnica double i float dla unix i win?
P-125292
darko202
» 2015-01-21 13:04:23
zastanawiam się nad Twoim pytaniem i chyba nie jestem w temacie :)

Czy mógłbyś doprecyzować pytanie ?
w jakim kontekście słyszałeś o tych różnicach.

co słyszałem ?
1.
zapis w systemie (lewostronny, prawostronny)
nie pamiętam (nazwy) jaki jest w Win, ale pamiętam że w Unix jest najczęściej odwrotny do Win,
np. kod uzupełnień U2
Liczba ośmiobitowa 10000000 ze znakiem ma wartość -128, Win
                   00000001 to samo w Unix
dlatego trzeba być czujnym jak patrzymy na znaki poprzez ich zapis bitowy 

2.
systemy 32/64 bitowe różny rozmiar
np. float 4 bit 32 , 8 w 64

3.
różne kompilatory - są różnice jak w p.2

4.
katalogi plików nagłówkowych
w unix /usr/include
w Win - jest inaczej (choćby ze względu na inna strukturę katalogów)

5.
Unix traktuje tak samo klawiaturę i plik - są to źródła danych, podobnie jak ekran i plik, do których można dane kierować
Win - inaczej

6.
Standardy języka - C/C+ są różne wersje języka
chyba większość trzyma się jednego standardu 
ale tu mogą chyba być różnice

7.
sekwencje znaków nowej linii wg Unixa (ASCII 10),  Windowsa (ASCII 13 + ASCII 10)
tu w kontekście czytania z pliku


tyle sobie przypomniałem, ale pewnie można wskazać jeszcze wiele innych.

czy znajdziesz w tym odpowiedz na Twoje pytanie - nie wiem

P-125298
NiceFox
Temat założony przez niniejszego użytkownika
» 2015-01-21 17:18:17
zainkludowałem  kawałek pożyczonego kodu z unix-a  pod msvc, obliczenia matematyczne z biblioteką GSL.
Problem mam taki że inne wyniki czasami się rozjeżdzają, nie wiem dlaczego, być może inna precyzja double.
P-125318
pekfos
» 2015-01-21 17:30:40
zapis w systemie (lewostronny, prawostronny)
nie pamiętam (nazwy) jaki jest w Win, ale pamiętam że w Unix jest najczęściej odwrotny do Win,
np. kod uzupełnień U2
Liczba ośmiobitowa 10000000 ze znakiem ma wartość -128, Win
                   00000001 to samo w Unix
dlatego trzeba być czujnym jak patrzymy na znaki poprzez ich zapis bitowy 
Ale bzdury.. Jeśli już, chodzi o kolejność bajtów, a nie bitów. I to nie zależy od systemu operacyjnego.

katalogi plików nagłówkowych
w unix /usr/include
w Win - jest inaczej (choćby ze względu na inna strukturę katalogów)
Co to ma do rzeczy? Co to ma do czegokolwiek..?

Unix traktuje tak samo klawiaturę i plik - są to źródła danych, podobnie jak ekran i plik, do których można dane kierować
Win - inaczej
No nie bardzo.

P-125319
Piastlis
» 2015-01-21 22:13:05
Akurat w temacie liczb rzeczywistych nie ma żadnych różnic bo nie może być.Typy real mają wsparcie sprzętowe w postaci koprocesora numerycznego. Dla pradziadka peceta czyli xp procesor miał numer 8086 a koprocesor 8087.Od 80486 koprocesor jest zintegrowany.Cyli wszystkie pentiumy odziedziczyły ten scalaczek z xp niejako w spadku. I liczą tak samo niezależnie od systemu operacyjnego. Nie jest to system idealny i ma swoje ograniczenia .Widziałem tu już kilka postów w których początkujący programista odkrywa że obliczenia w tych trybach pokazują straszne głupoty. Możliwe że chodzi tu o jakąś bibliotekę korygującą błędy lub całkowitą rezygnację z koprocesora.
P-125344
NiceFox
Temat założony przez niniejszego użytkownika
» 2015-01-22 13:10:57
P-125367
darko202
» 2015-01-22 14:54:30
>>zainkludowałem  kawałek pożyczonego kodu z unix-a  pod msvc, obliczenia matematyczne z biblioteką GSL. Problem mam taki że inne wyniki czasami się rozjeżdżają

Czyli problem masz z kodem używającym bibliotekę GSL ?
https://www.icm.edu.pl/kdm/GSL

1. powinieneś od tego zacząć,
2. załączyć kod
3. przykład błędnych obliczeń ? z czym porównujesz wyniki
4. załączona strona źle mi się otwiera, przynajmniej na tyle (brak biblioteki GSL) , ze mam problemy aby zrozumieniem jaki ma to związek z opisywanym przez Ciebie problemem.


dla wielu nie jest zaskoczeniem że (0-0 może być różne od  0) np. w Excelu (w tych nowszych może już się z tym uporali, ale bardzo długo Microsoft był na ten fakt oporny)

tak sobie myślę że mógłbyś szybko sprawdzić, czy biblioteki GSL dla Unixa i Win (niewątpliwie różne) dają te same wyniki dla funkcji, których użyłeś.
 



P-125373
Piastlis
» 2015-01-22 18:52:05
Z real trzeba być bardzo ostrożnym:
C/C++
#include<stdio.h>
#include<math.h>
#include <conio.h>
#include <iostream>


int main()

{
    double a, b;
   
    a = 0.3;
    b = 0.1;
    b = b + 0.1;
    b = b + 0.1;
    printf( "a=0.3 b=0.1+0.1+0.1 a=%0.20f  b=%0.20f ", a, b );
    std::cout << std::endl;
   
   
    b = b * 2 - 0.3;
    printf( "a=0.3 b=0.3*2-0.3    a=%0.20f  b=%0.20f ", a, b );
    std::cout << std::endl << std::endl;
   
    a = 0.3;
    b = 0.1;
    b = b + 0.1;
    b = b + 0.1;
    printf( "a=0.3 b=0.1+0.1+0.1 a=%0.20f  b=%0.20f ", a, b );
    std::cout << std::endl;
   
    if( a == b ) {
       
        printf( " a=b                a=%0.20f  b=%0.20f ", a, b );
        std::cout << std::endl << std::endl; }
    else
    {
       
        printf( " Durnawka a=%0.20f  b=%0.20f ", a, b );
        std::cout << std::endl << std::endl; }
    getch();
}
 Kod wręcz infantylny...
Ale wynik zadziwiający:

a=0.3 b=0.1+0.1+0.1 a=0.29999999999999999000  b=0.30000000000000004000
a=0.3 b=b*2-0.3     a=0.29999999999999999000  b=0.30000000000000010000

a=0.3 b=0.1+0.1+0.1 a=0.29999999999999999000  b=0.30000000000000004000
 Durnawka a=0.29999999999999999000  b=0.30000000000000004000
Wartości a i b zależą od sposobu obliczenia . Nie sprawdzałem jak się zachowują inne kompilatory i systemy operacyjne  ale jestem pewien że tak samo.
P-125388
« 1 » 2
  Strona 1 z 2 Następna strona