Что такое простой пример плавающей точки / погрешность округления?

Последняя рабочая версия этого json выглядит как 1.10.16.

$(document).ready( function () {
    $('#id').DataTable({
        
    language: {
       url: "https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json"
    }
    
    });
});
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/js/jquery.dataTables.min.js"></script>
<table id="id">
    <thead>
        <th>colonne 1</th>
        <th>colonne 2</th>
        <th>colonne 3</th>
    </thead>
</table>

32
задан MrDatabase 30 October 2008 в 07:21
поделиться

3 ответа

 for(double d = 0; d != 0.3; d += 0.1); // never terminates 
29
ответ дан 27 November 2019 в 20:01
поделиться

Простой тот C, который поймал меня некоторое время назад,

char *c = "90.1000";
double d = 0;
sscanf(c,"%f",&d);
printf("%0.4f",d);

>> 90.0999

, Это было в функции, которая преобразовала углы в DMS к радианам, которые не выполнили в вышеупомянутом случае.

6
ответ дан 27 November 2019 в 20:01
поделиться

Обычно ошибка с плавающей точкой относится к тому, когда число, которое не может быть сохранено в представлении плавающей точки IEEE.

Целые числа снабжены самым правым битом, являющимся 1 и каждым битом к левому удваиванию что (2,4,8...). Легко видеть, что это может сохранить любое целое число до 2^n, где n является числом битов.

мантисса (десятичная часть) числа с плавающей точкой хранится похожим способом, но перемещающийся слева направо, и каждым последовательным битом, являющимся половиной значения предыдущего. (Это на самом деле немного более сложно, чем это, но это сделает на данный момент).

Таким образом, числа как 0,5 (1/2) легко сохранить, но не каждое число < 1 может быть создан путем добавления постоянного числа частей формы 1/2, 1/4, 1/8...

А действительно простой пример 0.1, или 1/10. Это может быть сделано с бесконечным рядом (который я не могу действительно быть побеспокоен, разработав), но каждый раз, когда компьютерные магазины 0.1, это не точно это число, которое хранится.

, Если у Вас есть доступ к машине Unix, легко видеть это:

Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.10000000000000001
>>> 

Вы захотите быть действительно осторожными с тестами равенства с плаваниями и удваиваетесь на любом языке, в котором Вы находитесь.

(Что касается Вашего примера, 0.2 другой тех противных чисел, которые не могут быть сохранены в двоичном файле IEEE, но, пока Вы тестируете неравенства, а не равенства, как p < = 0.2, затем Вы будете хорошо.)

12
ответ дан 27 November 2019 в 20:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: