UUlpNacre
AI-werkruimte voor code

ULP-afstand van eindige binary64-getallen

Meet de afstand in voorstelbare stappen tussen twee eindige binary64-getallen en behandel de getekende nullen als gelijk.

● ● ●UlpNacre●
Werkprocessen · ULP-afstand van eindige binary64-getallen ×
import math, struct

def ulp_distance(a, b):
    if any(type(x) is not float or not math.isfinite(x) for x in (a, b)):
        raise ValueError("ulp.finite")
    def key(value):
        bits = struct.unpack(">Q", struct.pack(">d", value))[0]
        magnitude = bits & ((1 << 63)-1)
        return (1 << 63)-magnitude if bits >> 63 else (1 << 63)+magnitude
    return abs(key(a)-key(b))
✳ULP-afstand van eindige binary64-getallen
✓ WijzigingenControleer vóór het toepassen ↗
Illustratie van de werkruimte
Modellen
Stel een OpenAI-compatibel of Anthropic-endpoint in met de basis-URL en zo nodig een API-sleutel. Test de verbinding. Een lokale modelserver moet actief zijn; externe hulpmiddelen kunnen apart gegevens versturen.
Project
Test aangrenzende subnormalen en beide tekens, weiger gehele getallen, oneindigheden en NaN zonder de uitkomst als relatieve fout te zien.
Controleer vóór het toepassen
Vergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen.
Werkprocessen

ULP-afstand van eindige binary64-getallen

Werkprocessen ↗
Werkprocessen
import math, struct

def ulp_distance(a, b):
    if any(type(x) is not float or not math.isfinite(x) for x in (a, b)):
        raise ValueError("ulp.finite")
    def key(value):
        bits = struct.unpack(">Q", struct.pack(">d", value))[0]
        magnitude = bits & ((1 << 63)-1)
        return (1 << 63)-magnitude if bits >> 63 else (1 << 63)+magnitude
    return abs(key(a)-key(b))
AI-werkruimte voor code

Kies de juiste vergelijkingsregel voor een numerieke afwijking

Twee numerieke uitkomsten kunnen er bij weergave hetzelfde uitzien en toch verschillen in hun onderliggende representatie. UlpNacre biedt je een AI-programmeerwerkruimte voor Windows om te onderzoeken of dat verschil voor je toepassing belangrijk is. Geef de werkelijke invoer, berekening en vergelijking die aanleiding waren tot de vraag. Vraag de assistent te onderzoeken hoe waarden worden geproduceerd en beoordeeld voordat je een gelijkheidscontrole door een andere regel vervangt.

Het voorbeeld van afstand tussen drijvendekommarepresentaties biedt een mogelijke taak. Je kunt eindige invoer en nul met teken onderzoeken en daarna bespreken hoe een afstandsresultaat een test of diagnose moet informeren. Houd de tolerantiekeuze van de toepassing gescheiden van de meting zelf. Het bronvoorbeeld is Python; de domeinnaam bewijst niet dat er een PHP-specifieke debugger is en maakt de aannames niet geldig voor elke numerieke runtime.

Gebruik een ondersteund OpenAI-compatibel of Anthropic-eindpunt om een beschikbaar abliterated AI-model te selecteren, met inloggegevens waar nodig. Context, tools en beperkingen hangen van dat model en die server af. Beoordeel de voorgestelde vergelijkingscode en voer die uit op representatieve waarden die relevant zijn voor je toepassing. Een afzonderlijke lokale modelserver verzorgt de inferentie, terwijl verbonden tools nog steeds via externe diensten kunnen werken.

Verschillen in representatie onderzoeken

Moet elke kleine representatieafstand als gelijk tellen?

Dat is een toepassingseis, geen conclusie die de meting oplevert. Overweeg hoe de waarde wordt gebruikt en definieer een aanvaardbare vergelijkingsregel. Vraag om een uitleg van de beperkingen van het voorstel en test waarden nabij de beslisgrenzen die je software werkelijk gebruikt.

Waarom de berekening opnemen die de waarden heeft geproduceerd?

De herkomst kan verklaren waarom waarden verschillen en of de afwijking verwacht is. Onderzoek conversies en bewerkingen voordat je de laatste vergelijking verandert. Een nieuwe tolerantie kan elders een fout verbergen als het berekeningspad onverklaard blijft.

Kan het voorbeeld elke mogelijke numerieke invoer vergelijken?

Nee. Het vastgelegde contract accepteert eindige drijvendekommainvoer; andere waarden hebben een expliciet beleid nodig. Houd afgewezen invoer zichtbaar in de beoordeling in plaats van aan te nemen dat een hulpfunctie voor representatieafstand elk numeriek type of elke uitzonderingswaarde dekt.

Wat moet ik verifiëren als ik het idee naar een andere runtime overbreng?

Controleer de numerieke representatie, het conversiegedrag en de beschikbare bewerkingen van de runtime. Maak relevante grensgevallen opnieuw in die omgeving. Het gegeven Python-voorbeeld is een vertrekpunt voor onderzoek, geen bewijs dat een ongeteste vertaling identiek gedrag heeft.

Download voor Windows ↗

UlpNacre · Bijgewerkt 2026-10-25