• For more information on how to avoid pop-up ads and still support SkiTalk click HERE.

DIN Formula and Calculator Verification

tomahawkins

Making fresh tracks
Skier
SkiTalk Supporter
Joined
Dec 3, 2019
Posts
1,798
Location
Bellingham, WA
Interested in how DIN is computed, I started looking at the Javascript implementations behind a few online calculators. I guess not surprisingly, they mostly appear to be piles of steaming JS.

With some prior experience in a former life working level A flight software and with DIN serving an obvious safety function, these somewhat schlocky calculators make me a bit uncomfortable. So I forked out some money, bought the latest ISO-11088 (2018), read up on the standard, and created a semi-formal model mapping skier parameters to DIN binding settings. For anyone interested in DIN, take a look. Though the model is written in Haskell, it's made up of lots of simple pieces with a fair amount of comments so it should be reasonably easy to follow. I'd be happy to answer any Haskell questions for those interested in the details.


The next step is to use this model -- which may or may not be correct at this point -- to generate a Javascript testbench where I can drop in code from an online calculator to see how well it does. There's only 9360 possible DIN parameter settings so it should be trivial to exhaustively test all combinations.
 

François Pugh

Skiing the powder
Skier
Joined
Nov 17, 2015
Posts
7,617
Location
Great White North (Eastern side currently)
If you really want a hobby for a few days, just go back to the original data and then replace the step functions, (i.e. Release Value = F(boot sole length, skier weight, risk acceptance level) with continuous functions.
Bear in mind that due to the decision on which risk level to take, it can only yield a starting point anyway.
 
Thread Starter
TS
T

tomahawkins

Making fresh tracks
Skier
SkiTalk Supporter
Joined
Dec 3, 2019
Posts
1,798
Location
Bellingham, WA
Anyone use this DIN calculator? I built a Javascript test harness and bolted in the underlying function and it produced a slew of errors; below is just a partial list. The few I have spot-checked appear to be legitimate. For example the first with minimum mass, minimum height, skier type 2, minimum age, and minimum BSL should yield a DIN setting of 0.75, but this calculator returns 1.0.

FAIL: din MassA HeightH SkierType2 Age0 Bsl0 == Just 0.75 but got 1
VM703:52 FAIL: din MassA HeightH SkierType2 Age0 Bsl3 == Nothing but got 0.75
VM703:65 FAIL: din MassA HeightH SkierType2 Age2 Bsl0 == Just 0.75 but got 1
VM703:68 FAIL: din MassA HeightH SkierType2 Age2 Bsl3 == Nothing but got 0.75
VM703:73 FAIL: din MassA HeightH SkierType3 Age0 Bsl0 == Just 0.75 but got 1.5
VM703:74 FAIL: din MassA HeightH SkierType3 Age0 Bsl1 == Just 0.75 but got 1.25
VM703:75 FAIL: din MassA HeightH SkierType3 Age0 Bsl2 == Just 0.75 but got 1.25
VM703:76 FAIL: din MassA HeightH SkierType3 Age0 Bsl3 == Nothing but got 1
VM703:89 FAIL: din MassA HeightH SkierType3 Age2 Bsl0 == Just 1.0 but got 1.5
VM703:90 FAIL: din MassA HeightH SkierType3 Age2 Bsl1 == Just 0.75 but got 1.25
VM703:91 FAIL: din MassA HeightH SkierType3 Age2 Bsl2 == Just 0.75 but got 1.25
VM703:92 FAIL: din MassA HeightH SkierType3 Age2 Bsl3 == Just 0.75 but got 1
VM703:97 FAIL: din MassA HeightH SkierType3Plus Age0 Bsl0 == Just 0.75 but got 2
VM703:98 FAIL: din MassA HeightH SkierType3Plus Age0 Bsl1 == Just 0.75 but got 1.75
VM703:99 FAIL: din MassA HeightH SkierType3Plus Age0 Bsl2 == Just 0.75 but got 1.5
VM703:100 FAIL: din MassA HeightH SkierType3Plus Age0 Bsl3 == Nothing but got 1.5
VM703:101 FAIL: din MassA HeightH SkierType3Plus Age0 Bsl4 == Nothing but got 1.25
VM703:113 FAIL: din MassA HeightH SkierType3Plus Age2 Bsl0 == Just 1.5 but got 2
VM703:114 FAIL: din MassA HeightH SkierType3Plus Age2 Bsl1 == Just 1.25 but got 1.75
VM703:115 FAIL: din MassA HeightH SkierType3Plus Age2 Bsl2 == Just 1.25 but got 1.5
VM703:116 FAIL: din MassA HeightH SkierType3Plus Age2 Bsl3 == Just 1.0 but got 1.5
VM703:117 FAIL: din MassA HeightH SkierType3Plus Age2 Bsl4 == Nothing but got 1.25
VM703:169 FAIL: din MassA HeightI SkierType2 Age0 Bsl0 == Just 0.75 but got 1
VM703:172 FAIL: din MassA HeightI SkierType2 Age0 Bsl3 == Nothing but got 0.75
VM703:185 FAIL: din MassA HeightI SkierType2 Age2 Bsl0 == Just 0.75 but got 1
VM703:188 FAIL: din MassA HeightI SkierType2 Age2 Bsl3 == Nothing but got 0.75
VM703:193 FAIL: din MassA HeightI SkierType3 Age0 Bsl0 == Just 0.75 but got 1.5
VM703:194 FAIL: din MassA HeightI SkierType3 Age0 Bsl1 == Just 0.75 but got 1.25
VM703:195 FAIL: din MassA HeightI SkierType3 Age0 Bsl2 == Just 0.75 but got 1.25
VM703:196 FAIL: din MassA HeightI SkierType3 Age0 Bsl3 == Nothing but got 1
VM703:209 FAIL: din MassA HeightI SkierType3 Age2 Bsl0 == Just 1.0 but got 1.5
VM703:210 FAIL: din MassA HeightI SkierType3 Age2 Bsl1 == Just 0.75 but got 1.25
VM703:211 FAIL: din MassA HeightI SkierType3 Age2 Bsl2 == Just 0.75 but got 1.25
VM703:212 FAIL: din MassA HeightI SkierType3 Age2 Bsl3 == Just 0.75 but got 1
VM703:217 FAIL: din MassA HeightI SkierType3Plus Age0 Bsl0 == Just 0.75 but got 2
VM703:218 FAIL: din MassA HeightI SkierType3Plus Age0 Bsl1 == Just 0.75 but got 1.75
VM703:219 FAIL: din MassA HeightI SkierType3Plus Age0 Bsl2 == Just 0.75 but got 1.5
VM703:220 FAIL: din MassA HeightI SkierType3Plus Age0 Bsl3 == Nothing but got 1.5
VM703:221 FAIL: din MassA HeightI SkierType3Plus Age0 Bsl4 == Nothing but got 1.25
VM703:233 FAIL: din MassA HeightI SkierType3Plus Age2 Bsl0 == Just 1.5 but got 2
VM703:234 FAIL: din MassA HeightI SkierType3Plus Age2 Bsl1 == Just 1.25 but got 1.75
VM703:235 FAIL: din MassA HeightI SkierType3Plus Age2 Bsl2 == Just 1.25 but got 1.5
VM703:236 FAIL: din MassA HeightI SkierType3Plus Age2 Bsl3 == Just 1.0 but got 1.5
VM703:237 FAIL: din MassA HeightI SkierType3Plus Age2 Bsl4 == Nothing but got 1.25
VM703:289 FAIL: din MassA HeightJ SkierType2 Age0 Bsl0 == Just 0.75 but got 1
VM703:292 FAIL: din MassA HeightJ SkierType2 Age0 Bsl3 == Nothing but got 0.75
VM703:305 FAIL: din MassA HeightJ SkierType2 Age2 Bsl0 == Just 0.75 but got 1
VM703:308 FAIL: din MassA HeightJ SkierType2 Age2 Bsl3 == Nothing but got 0.75
VM703:313 FAIL: din MassA HeightJ SkierType3 Age0 Bsl0 == Just 0.75 but got 1.5
VM703:314 FAIL: din MassA HeightJ SkierType3 Age0 Bsl1 == Just 0.75 but got 1.25
VM703:315 FAIL: din MassA HeightJ SkierType3 Age0 Bsl2 == Just 0.75 but got 1.25
VM703:316 FAIL: din MassA HeightJ SkierType3 Age0 Bsl3 == Nothing but got 1
VM703:329 FAIL: din MassA HeightJ SkierType3 Age2 Bsl0 == Just 1.0 but got 1.5
VM703:330 FAIL: din MassA HeightJ SkierType3 Age2 Bsl1 == Just 0.75 but got 1.25
VM703:331 FAIL: din MassA HeightJ SkierType3 Age2 Bsl2 == Just 0.75 but got 1.25
VM703:332 FAIL: din MassA HeightJ SkierType3 Age2 Bsl3 == Just 0.75 but got 1
VM703:337 FAIL: din MassA HeightJ SkierType3Plus Age0 Bsl0 == Just 0.75 but got 2
VM703:338 FAIL: din MassA HeightJ SkierType3Plus Age0 Bsl1 == Just 0.75 but got 1.75
VM703:339 FAIL: din MassA HeightJ SkierType3Plus Age0 Bsl2 == Just 0.75 but got 1.5
VM703:340 FAIL: din MassA HeightJ SkierType3Plus Age0 Bsl3 == Nothing but got 1.5
VM703:341 FAIL: din MassA HeightJ SkierType3Plus Age0 Bsl4 == Nothing but got 1.25
VM703:353 FAIL: din MassA HeightJ SkierType3Plus Age2 Bsl0 == Just 1.5 but got 2
VM703:354 FAIL: din MassA HeightJ SkierType3Plus Age2 Bsl1 == Just 1.25 but got 1.75
VM703:355 FAIL: din MassA HeightJ SkierType3Plus Age2 Bsl2 == Just 1.25 but got 1.5
VM703:356 FAIL: din MassA HeightJ SkierType3Plus Age2 Bsl3 == Just 1.0 but got 1.5
VM703:357 FAIL: din MassA HeightJ SkierType3Plus Age2 Bsl4 == Nothing but got 1.25
VM703:409 FAIL: din MassA HeightK SkierType2 Age0 Bsl0 == Just 0.75 but got 1
VM703:412 FAIL: din MassA HeightK SkierType2 Age0 Bsl3 == Nothing but got 0.75
VM703:425 FAIL: din MassA HeightK SkierType2 Age2 Bsl0 == Just 0.75 but got 1
VM703:428 FAIL: din MassA HeightK SkierType2 Age2 Bsl3 == Nothing but got 0.75
VM703:433 FAIL: din MassA HeightK SkierType3 Age0 Bsl0 == Just 0.75 but got 1.5
VM703:434 FAIL: din MassA HeightK SkierType3 Age0 Bsl1 == Just 0.75 but got 1.25
VM703:435 FAIL: din MassA HeightK SkierType3 Age0 Bsl2 == Just 0.75 but got 1.25
VM703:436 FAIL: din MassA HeightK SkierType3 Age0 Bsl3 == Nothing but got 1
VM703:449 FAIL: din MassA HeightK SkierType3 Age2 Bsl0 == Just 1.0 but got 1.5
VM703:450 FAIL: din MassA HeightK SkierType3 Age2 Bsl1 == Just 0.75 but got 1.25
VM703:451 FAIL: din MassA HeightK SkierType3 Age2 Bsl2 == Just 0.75 but got 1.25
VM703:452 FAIL: din MassA HeightK SkierType3 Age2 Bsl3 == Just 0.75 but got 1
VM703:457 FAIL: din MassA HeightK SkierType3Plus Age0 Bsl0 == Just 0.75 but got 2
VM703:458 FAIL: din MassA HeightK SkierType3Plus Age0 Bsl1 == Just 0.75 but got 1.75
VM703:459 FAIL: din MassA HeightK SkierType3Plus Age0 Bsl2 == Just 0.75 but got 1.5
VM703:460 FAIL: din MassA HeightK SkierType3Plus Age0 Bsl3 == Nothing but got 1.5
VM703:461 FAIL: din MassA HeightK SkierType3Plus Age0 Bsl4 == Nothing but got 1.25
VM703:473 FAIL: din MassA HeightK SkierType3Plus Age2 Bsl0 == Just 1.5 but got 2
VM703:474 FAIL: din MassA HeightK SkierType3Plus Age2 Bsl1 == Just 1.25 but got 1.75
VM703:475 FAIL: din MassA HeightK SkierType3Plus Age2 Bsl2 == Just 1.25 but got 1.5
VM703:476 FAIL: din MassA HeightK SkierType3Plus Age2 Bsl3 == Just 1.0 but got 1.5
VM703:477 FAIL: din MassA HeightK SkierType3Plus Age2 Bsl4 == Nothing but got 1.25
VM703:529 FAIL: din MassA HeightL SkierType2 Age0 Bsl0 == Just 0.75 but got 1
VM703:532 FAIL: din MassA HeightL SkierType2 Age0 Bsl3 == Nothing but got 0.75
VM703:545 FAIL: din MassA HeightL SkierType2 Age2 Bsl0 == Just 0.75 but got 1
VM703:548 FAIL: din MassA HeightL SkierType2 Age2 Bsl3 == Nothing but got 0.75
VM703:553 FAIL: din MassA HeightL SkierType3 Age0 Bsl0 == Just 0.75 but got 1.5
VM703:554 FAIL: din MassA HeightL SkierType3 Age0 Bsl1 == Just 0.75 but got 1.25
VM703:555 FAIL: din MassA HeightL SkierType3 Age0 Bsl2 == Just 0.75 but got 1.25
VM703:556 FAIL: din MassA HeightL SkierType3 Age0 Bsl3 == Nothing but got 1
VM703:569 FAIL: din MassA HeightL SkierType3 Age2 Bsl0 == Just 1.0 but got 1.5
VM703:570 FAIL: din MassA HeightL SkierType3 Age2 Bsl1 == Just 0.75 but got 1.25
VM703:571 FAIL: din MassA HeightL SkierType3 Age2 Bsl2 == Just 0.75 but got 1.25
VM703:572 FAIL: din MassA HeightL SkierType3 Age2 Bsl3 == Just 0.75 but got 1
VM703:577 FAIL: din MassA HeightL SkierType3Plus Age0 Bsl0 == Just 0.75 but got 2
VM703:578 FAIL: din MassA HeightL SkierType3Plus Age0 Bsl1 == Just 0.75 but got 1.75
VM703:579 FAIL: din MassA HeightL SkierType3Plus Age0 Bsl2 == Just 0.75 but got 1.5
VM703:580 FAIL: din MassA HeightL SkierType3Plus Age0 Bsl3 == Nothing but got 1.5
VM703:581 FAIL: din MassA HeightL SkierType3Plus Age0 Bsl4 == Nothing but got 1.25
VM703:593 FAIL: din MassA HeightL SkierType3Plus Age2 Bsl0 == Just 1.5 but got 2
VM703:594 FAIL: din MassA HeightL SkierType3Plus Age2 Bsl1 == Just 1.25 but got 1.75
VM703:595 FAIL: din MassA HeightL SkierType3Plus Age2 Bsl2 == Just 1.25 but got 1.5
VM703:596 FAIL: din MassA HeightL SkierType3Plus Age2 Bsl3 == Just 1.0 but got 1.5
VM703:597 FAIL: din MassA HeightL SkierType3Plus Age2 Bsl4 == Nothing but got 1.25
VM703:649 FAIL: din MassA HeightM SkierType2 Age0 Bsl0 == Just 0.75 but got 1
VM703:652 FAIL: din MassA HeightM SkierType2 Age0 Bsl3 == Nothing but got 0.75
VM703:665 FAIL: din MassA HeightM SkierType2 Age2 Bsl0 == Just 0.75 but got 1
VM703:668 FAIL: din MassA HeightM SkierType2 Age2 Bsl3 == Nothing but got 0.75
VM703:673 FAIL: din MassA HeightM SkierType3 Age0 Bsl0 == Just 0.75 but got 1.5
VM703:674 FAIL: din MassA HeightM SkierType3 Age0 Bsl1 == Just 0.75 but got 1.25
VM703:675 FAIL: din MassA HeightM SkierType3 Age0 Bsl2 == Just 0.75 but got 1.25
VM703:676 FAIL: din MassA HeightM SkierType3 Age0 Bsl3 == Nothing but got 1
VM703:689 FAIL: din MassA HeightM SkierType3 Age2 Bsl0 == Just 1.0 but got 1.5
VM703:690 FAIL: din MassA HeightM SkierType3 Age2 Bsl1 == Just 0.75 but got 1.25
VM703:691 FAIL: din MassA HeightM SkierType3 Age2 Bsl2 == Just 0.75 but got 1.25
VM703:692 FAIL: din MassA HeightM SkierType3 Age2 Bsl3 == Just 0.75 but got 1
VM703:697 FAIL: din MassA HeightM SkierType3Plus Age0 Bsl0 == Just 0.75 but got 2
VM703:698 FAIL: din MassA HeightM SkierType3Plus Age0 Bsl1 == Just 0.75 but got 1.75
VM703:699 FAIL: din MassA HeightM SkierType3Plus Age0 Bsl2 == Just 0.75 but got 1.5
VM703:700 FAIL: din MassA HeightM SkierType3Plus Age0 Bsl3 == Nothing but got 1.5
VM703:701 FAIL: din MassA HeightM SkierType3Plus Age0 Bsl4 == Nothing but got 1.25
VM703:713 FAIL: din MassA HeightM SkierType3Plus Age2 Bsl0 == Just 1.5 but got 2
VM703:714 FAIL: din MassA HeightM SkierType3Plus Age2 Bsl1 == Just 1.25 but got 1.75
VM703:715 FAIL: din MassA HeightM SkierType3Plus Age2 Bsl2 == Just 1.25 but got 1.5
VM703:716 FAIL: din MassA HeightM SkierType3Plus Age2 Bsl3 == Just 1.0 but got 1.5
VM703:717 FAIL: din MassA HeightM SkierType3Plus Age2 Bsl4 == Nothing but got 1.25
VM703:721 FAIL: din MassB HeightH SkierType1Minus Age0 Bsl0 == Just 1.0 but got 0.75
VM703:724 FAIL: din MassB HeightH SkierType1Minus Age0 Bsl3 == Just 0.75 but got null
 

mdf

entering the Big Couloir
Skier
Team Gathermeister
SkiTalk Supporter
Joined
Nov 12, 2015
Posts
7,216
Location
Boston Suburbs
Way, way back when I did curve fits to the DIN charts and found that it's really simple before you round the results to discrete levels.
It is well known that different manufacturer's published charts are not 100% consistent. (Not big differences, just the sort of thing you'd expect if they rounded differently.)

On the other hand, the other errors you show are pretty large. But then, Age 0 is a bit of a corner case. Do normal ages get the right answer?
 

Near Nyquist

At the edge of instability
Skier
Joined
Dec 3, 2017
Posts
1,044
Location
Home of Apple Computer
Way, way back when I did curve fits to the DIN charts and found that it's really simple before you round the results to discrete levels.
It is well known that different manufacturer's published charts are not 100% consistent. (Not big differences, just the sort of thing you'd expect if they rounded differently.)

On the other hand, the other errors you show are pretty large. But then, Age 0 is a bit of a corner case. Do normal ages get the right answer?
You reviewed the attached code on git right ???

or you just reading the output n making assumptions

I am eagerly awaiting your answer with baited breath
 

Tony S

I have a confusion to make ...
Skier
Team Gathermeister
SkiTalk Supporter
Joined
Nov 14, 2015
Posts
12,621
Location
Maine
Anyone use this DIN calculator? I built a Javascript test harness and bolted in the underlying function and it produced a slew of errors; below is just a partial list. The few I have spot-checked appear to be legitimate. For example the first with minimum mass, minimum height, skier type 2, minimum age, and minimum BSL should yield a DIN setting of 0.75, but this calculator returns 1.0.
This one belongs in the "Never Assume" forum.
 

cantunamunch

Meh
Skier
Joined
Nov 17, 2015
Posts
21,897
Location
Behavioral sink
Way, way back when I did curve fits to the DIN charts and found that it's really simple before you round the results to discrete levels.
It is well known that different manufacturer's published charts are not 100% consistent. (Not big differences, just the sort of thing you'd expect if they rounded differently.)

And especially when the standard includes human testing.
 
Thread Starter
TS
T

tomahawkins

Making fresh tracks
Skier
SkiTalk Supporter
Joined
Dec 3, 2019
Posts
1,798
Location
Bellingham, WA

crgildart

Gravity Slave
Skier
Joined
Nov 12, 2015
Posts
16,325
Location
The Bull City
Chaos in the DIN regression. Why not? Happens more often that most folks realize..
 

François Pugh

Skiing the powder
Skier
Joined
Nov 17, 2015
Posts
7,617
Location
Great White North (Eastern side currently)
A verified Javascript implementation:

Translated the chart into java code: interesting, but not what we should be looking for.

The chart was made by translating smooth functions into step functions by selecting various points on the function curves. The functions were made by applying statistics to data on breaking strength of human cadaver bones. The assumption that weight is a primary input for bone strength is borne out by correlation. The fact that torque is a function of lever length and applied force was also employed.
The numbers going across a row (or down a column) were actually points on a curve, but back in the day computers were not as prolific as they are now, so the chart was needed. What we almost need now is to go back to the functions and program those functions to give us an exact number for exact input, or maybe go back to the original data (not just the few numbers on the chart) and do the curve fitting again and come up new functions. It will likely never happen in today's litigation climate.

However, it's not really needed, as the Chart only gives a "starting number". Who races DH or SG at a "3" level on the Chart? People who ski aggressively, and those who don't, pick their own risk level that may be a "1", a "3+" or anything else (at their own risk of course). That choice makes more difference than the rounding off to the next or previous number on the chart.
 
Thread Starter
TS
T

tomahawkins

Making fresh tracks
Skier
SkiTalk Supporter
Joined
Dec 3, 2019
Posts
1,798
Location
Bellingham, WA
Here's a DIN question that came up looking while working with the site owner of Mechanics-of-Sport, investigating a potential bug:

He was using the Salomon shop manual as a guide for the DIN procedure, whose algorithm states:

1. Look up skier code based on mass and height.
2. Adjust for skier type.
3. Adjust for age, under which says:
- For skiers 29 lb (13 kg) and under, no further correction is appropriate.

But in the ISO-11088-2018 standard, this bullet point only shows up as "NOTE 1" under the table. I take this to mean for skiers 13 kg and under, no correction is needed regardless of skier type or age. But Salomon's procedure adjusts for skier type first. Depending on which algorithm you use, you can end up with different values.

What is the correct procedure? Anyone at Salomon we can reach out to?

In comparison, Look's shop manual is more inline with the standard.
 
Last edited:
Thread Starter
TS
T

tomahawkins

Making fresh tracks
Skier
SkiTalk Supporter
Joined
Dec 3, 2019
Posts
1,798
Location
Bellingham, WA
Translated the chart into java code: interesting, but not what we should be looking for.

The chart was made by translating smooth functions into step functions by selecting various points on the function curves. The functions were made by applying statistics to data on breaking strength of human cadaver bones. The assumption that weight is a primary input for bone strength is borne out by correlation. The fact that torque is a function of lever length and applied force was also employed.
The numbers going across a row (or down a column) were actually points on a curve, but back in the day computers were not as prolific as they are now, so the chart was needed. What we almost need now is to go back to the functions and program those functions to give us an exact number for exact input, or maybe go back to the original data (not just the few numbers on the chart) and do the curve fitting again and come up new functions. It will likely never happen in today's litigation climate.

However, it's not really needed, as the Chart only gives a "starting number". Who races DH or SG at a "3" level on the Chart? People who ski aggressively, and those who don't, pick their own risk level that may be a "1", a "3+" or anything else (at their own risk of course). That choice makes more difference than the rounding off to the next or previous number on the chart.

I agree, but I can't change the standard. I just want to ensure DIN calculators don't return wildly wrong values.
 

Sibhusky

Whitefish, MT
Skier
Joined
Oct 26, 2016
Posts
4,804
Location
Whitefish, MT
New to Ski is the first site to use this DIN calculator.
It won't work for me. Must be some browser issues. Tried two browsers, neither worked. Can use the mechanics one just fine. And, it returned the DIN expected, which was sort of nice as the DIN I've been using was from 30 pounds ago and I used it 20 pounds higher, too. Apparently it'll be good all the way down to my goal weight.
 
Last edited:

Sponsor

Staff online

Top