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? |
|
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
|
|
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. |
|
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. |
|
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. |
|
NiceFox Temat założony przez niniejszego użytkownika |
» 2015-01-22 13:10:57 |
|
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/GSL1. 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ś. |
|
Piastlis |
» 2015-01-22 18:52:05 Z real trzeba być bardzo ostrożnym: #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. |
|
« 1 » 2 |