Talk:Cumulative standard deviation: Difference between revisions

From Rosetta Code
Content added Content deleted
Line 25: Line 25:
:::The task description ''is'' complete. If one reads the title and skims the task description then of course one is likely to come a cropper. This task is not only about the calculation but also how it is to be done - numbers given to the function singly, intermediate results.
:::The task description ''is'' complete. If one reads the title and skims the task description then of course one is likely to come a cropper. This task is not only about the calculation but also how it is to be done - numbers given to the function singly, intermediate results.
:::Looking at the failing examples so far they mostly stem from ignoring the task description. I see it as equivalent to asking for a merge sort and someone sticking in a bubble sort and saying "it sorts doesn't it"? --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 13:38, 17 June 2015 (UTC)
:::Looking at the failing examples so far they mostly stem from ignoring the task description. I see it as equivalent to asking for a merge sort and someone sticking in a bubble sort and saying "it sorts doesn't it"? --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 13:38, 17 June 2015 (UTC)

:::: I think there has been some similar discussion in the context of sorting algorithms. The talk page on [[Talk:Quicksort|quicksort]] has some of that, though not the conversation I thought I remembered. Meanwhile, [[User:Short_Circuit|Short Circuit's]] user page has some of the relevant policy. And of course the [[Help:Adding_a_new_programming_task|Add a Task]] page has some good advice. --[[User:Rdm|Rdm]] ([[User talk:Rdm|talk]]) 14:18, 17 June 2015 (UTC)

Revision as of 14:18, 17 June 2015

n is always >0

But several examples check for n == 0. I don't think it is necessary in this task (but won't hurt). --Paddy3118 22:06, 16 June 2009 (UTC)

It won't hurt, and n is not always > 0. All the code I've done, and even the rest for what I can understand, provide a way of calculating standard deviation and mean, even if the first datum was not injected yet. A smart user won't call the method/function to get the mean if s/he's not put at least one value, but a dummy user could. In the OO cases, some methods shouldn't be public, and standard deviation could not be requested without adding a new value (very odd!), i.e. the only way to get stddev should be adding a new value... so that it would be a "know once and then forget" function/object. So to me it was "natural" to check for n>0, letting the user call mean, variance or whatever also if s/he's not added any value at all, without causing a division by zero problem. Of course for the task purpose it is not strictly necessary (real usability is not a requirement), nonetheless, it won't hurt and it assures that the behaviour is "good" for any input or misusage... --ShinTakezou 23:23, 16 June 2009 (UTC)
I'm assured by my statistically-versed friends that the Standard Deviation isn't defined for though it's convenient to define it to be when (i.e., it's trivial to get that from the mathematics if you're asking for the sample deviation, which is what this task is about). —Donal Fellows 12:35, 17 June 2009 (UTC)
Oh yes, it is so, but I was talking about values num/count can assume, not if the result is meaningful or not when they get that value. --ShinTakezou 12:54, 17 June 2009 (UTC)

Function takes vector/array or single value?

I took the task description to mean that the function should be called multiple times with a succession of values - hence the need of state between calls. Some think that the function should take an array of values. What to do? --Paddy3118 11:45, 17 June 2009 (UTC)

The function should hold state between calls and take a single value at a time. Some people can't seem to resist implementing it wrongly. —Donal Fellows 12:31, 17 June 2009 (UTC)
That should probably have been called a method rather than a function. Some people can't seem to resist naming it wrongly? --Rdm (talk) 23:31, 15 June 2015 (UTC)
I would perhaps call it a static function. Shrug. -- Erik Siers (talk) 03:57, 16 June 2015 (UTC)

Many examples (too many), have not paid attention to the task description. I've started to mark those but it is a long job... Please remember that if your language cannot match some aspect of the task description then state this clearly, up front and describe what aspects of the task you can follow. (Note, that is if your language cannot do something - not merely if your example does not follow the task). The J language example goes about it in this way, I guess if you had a "pure" functional language that did not allow functions to save state between calls then you might need to explain this at the beginning of your example as well as what compromises this lead to. --Paddy3118 (talk) 22:16, 16 June 2015 (UTC)

Rather than "cannotdo something" I would prefer the more accurate "should not do something". Presumably the focus on the detail of how the incremental process works has something to do with ideas about efficiency? But, depending on the language, this level of micromanagement might make things considerably more inefficient than they would be otherwise - I have seen this kind of issue lead to timing ratios where one implementation would be over 9000 times faster than the other for some test data sets (though smaller differences are also possible and I try not to care when the difference is less than a factor of 2 -- modern machines introduce variations which can easily reverse a "less than factor of 2" performance issue). --Rdm (talk) 10:33, 17 June 2015 (UTC)
Unfortunate case of an unfairly restrictive task description
I too think that mandating a stateful function makes this task needlessly restrictive. If the task were called "Stateful function" this would be appropriate, but for a generic math-problem task called "Standard deviation", I think it's bad to force solutions into a particular idiom that may be appropriate in some languages but not others - because this effectively bars those other languages from showing off an idiomatic solutions to that math problem on RosettaCode.
If there weren't such a huge number of existing solution making changes unfeasible now, I would suggest to:
  • Rename the task to "Running standard deviation" (so that a separate "Standard deviation" task can deal with the simpler case of fixed inputs).
  • Change the task description to something like "For a stream of values that may come in over time (e.g. from standard input or from another algorithm), calculate and print the running standard deviation immediately after each incoming value". Leave it open to implementors how to accomplish this. Some may use a stateful function that is called repeatedly with single values, while others may use a function that takes a stream or lazy list as argument, etc.
It may be too late for this task, but lets try to make sure that in the future, such needlessly restrictive tasks get fixed during draft stage (and before they become big). Tasks asking for specific programming idioms or language features should be clearly named as such - generic math-problem tasks should not be hijacked for that.
--Smls (talk) 12:03, 17 June 2015 (UTC)
The task description is complete. If one reads the title and skims the task description then of course one is likely to come a cropper. This task is not only about the calculation but also how it is to be done - numbers given to the function singly, intermediate results.
Looking at the failing examples so far they mostly stem from ignoring the task description. I see it as equivalent to asking for a merge sort and someone sticking in a bubble sort and saying "it sorts doesn't it"? --Paddy3118 (talk) 13:38, 17 June 2015 (UTC)
I think there has been some similar discussion in the context of sorting algorithms. The talk page on quicksort has some of that, though not the conversation I thought I remembered. Meanwhile, Short Circuit's user page has some of the relevant policy. And of course the Add a Task page has some good advice. --Rdm (talk) 14:18, 17 June 2015 (UTC)