Как исправить диаграммы echart, использующие bigint?Javascript

Форум по Javascript
Ответить
Anonymous
 Как исправить диаграммы echart, использующие bigint?

Сообщение Anonymous »

Я работаю над веб-сайтом, посвященным вычислениям 3n + 1 (гипотеза Коллатца) и созданию различных визуализаций этих данных.
Я столкнулся с проблемой, связанной с числовой точностью значений, отображаемых на моих диаграммах. Одна из моих рабочих диаграмм показана в этом прототипе и предназначена для отображения с максимально возможной точностью данных из списка, содержащего результаты вычислений 3n + 1.
Однако я столкнулся с нежелательной проблемой: ECharts не поддерживает BigInt, и поскольку я не очень знаком с компиляцией или подобными низкоуровневыми решениями, я временно прибегнул к использованию логарифмов (log10).
В конце концов я пришел к выводу, что необходимы две диаграммы:
математически точная диаграмма и
логарифмическая диаграмма.
Я нашел этот сайт — Collatz Graph — где математически точная диаграмма была отображена на (хотя, к сожалению, она ломается, когда числа становятся чрезвычайно большими). Это примерно тот результат, которого я хотел бы достичь с помощью ECharts.
Я обратился за помощью к ChatGPT, Qwen и Claude, но даже они не смогли решить мою проблему, которая, по общему признанию, весьма нестандартна.
Чтобы наглядно продемонстрировать проблему, я опубликовал CodePen, содержащий код, отвечающий за создание диаграммы (пример ошибки диаграммы Codepen), но я очень недоволен результатом.
Я довольно плохо создаю диаграммы, поэтому прошу помощи у профессионалов.
Код:

Код: Выделить всё

const inp = document.getElementById('input');
const runBtn = document.querySelector('.play');
const chartEl = document.getElementById('chart');

chartEl.style.width = '500px';
chartEl.style.height = '300px';

/* ===== input filter  (NUMBERS ONLY (so you can input infinite amount of nums)) ===== */
inp.addEventListener('beforeinput', e => {
if (e.data && !/^[0-9]+$/.test(e.data)) {
e.preventDefault();
}
});

/* ===== Collatz calculations BigInt ONLY ===== */
function collatzBigInt(n) {
const spisok = [];

if (n === 0n) return spisok;

while (true) {
spisok.push(n);
if (n === 1n) break;

if (n % 2n === 0n) {
n = n / 2n;
} else {
n = n * 3n + 1n;
}

if (spisok.length > 20000) break;
}

return spisok;
};

/* ===== graph compiler (BigInt -> Number) ===== */
function graphLogSize(value) {
const s = value.toString();
const k = 15;

if (s.length 

Подробнее здесь: [url]https://stackoverflow.com/questions/79889264/how-do-i-fix-my-echart-charts-that-are-using-bigint[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»